Converting java date to Sql timestamp
Asked Answered
V

5

53

I am trying to insert java.util.Date after converting it to java.sql.Timestamp and I am using the following snippet:

java.util.Date utilDate = new java.util.Date();
java.sql.Timestamp sq = new java.sql.Timestamp(utilDate.getTime());

But this is giving me sq as 2014-04-04 13:30:17.533

Is there any way to get the output without milliseconds?

Vaginal answered 4/4, 2014 at 8:1 Comment(11)
Well you're currently creating a java.sql.Timestamp - did you want that, or a java.sql.Date? They're different types...Invertebrate
Use a Calendar, set the millisecond to 0, the create your Timestamp from the calendar's time.Hatchment
@JonSkeet, Date will not be able to hold time information like Hours MinsTyche
@Reddy "The class Date represents a specific instant in time, with millisecond precision. "Aboutship
@Reddy: Yes, but I was going from the first line of the post: "I want to convert java.util.Date to java.sql.date" - basically the requirements are entirely unclear at the moment.Invertebrate
@JonSkeet, pretty much he's trying to store the data in database and it's storing with milliseconds, which he doesn't want. since util.Date has to be converted to sql.Date commonly to store into DBTyche
I want something in this format: 2014-04-04 13:30:17Vaginal
@Shitu: Right, so you don't want java.sql.Date at all. Please edit your post.Invertebrate
@Reddy: You still seem to be missing my point: the original post is unclear about whether the time part is required at all, given that it starts off talking about java.sql.Date and then uses java.sql.Timestamp. I'm well aware of both types, but they're not the same, and we weren't given actual requirements... with the comment a couple of minutes ago, it's clearer - but that information had to come from the OP...Invertebrate
@Reddy: Additionally, are you actually concerned about what gets stored, or just the output when you convert the value to text later?Invertebrate
In the context of storing something in a datetime column in a database, I don't understand the requirement "I want something in this format". Format has to do with output, not data types.Edwardedwardian
S
48

You can cut off the milliseconds using a Calendar:

java.util.Date utilDate = new java.util.Date();
Calendar cal = Calendar.getInstance();
cal.setTime(utilDate);
cal.set(Calendar.MILLISECOND, 0);
System.out.println(new java.sql.Timestamp(utilDate.getTime()));
System.out.println(new java.sql.Timestamp(cal.getTimeInMillis()));

Output:

2014-04-04 10:10:17.78
2014-04-04 10:10:17.0
Skeen answered 4/4, 2014 at 8:11 Comment(0)
A
16

Take a look at SimpleDateFormat:

java.util.Date utilDate = new java.util.Date();
java.sql.Timestamp sq = new java.sql.Timestamp(utilDate.getTime());  

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
System.out.println(sdf.format(sq));
Alongside answered 4/4, 2014 at 8:7 Comment(0)
T
8

The problem is with the way you are printing the Time data

java.util.Date utilDate = new java.util.Date();
java.sql.Timestamp sq = new java.sql.Timestamp(utilDate.getTime());
System.out.println(sa); //this will print the milliseconds as the toString() has been written in that format

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(timestamp)); //this will print without ms
Tyche answered 4/4, 2014 at 8:8 Comment(1)
The OP is interested in storing the data to a database - that doesn't require a text conversion at all. The question is unclear, basically - it's not obvious whether the OP doesn't want to store milliseconds or doesn't want to render them.Invertebrate
Y
5

I suggest using DateUtils from apache.commons library.

long millis = DateUtils.truncate(utilDate, Calendar.MILLISECOND).getTime();
java.sql.Timestamp sq = new java.sql.Timestamp(millis );

Edit: Fixed Calendar.MILISECOND to Calendar.MILLISECOND

Youngman answered 4/4, 2014 at 8:9 Comment(1)
please change Calender.MILISECONDS to Calendar.MILLISECOND that is the correct propertyRotberg
M
1
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
System.out.println("utilDate:" + utilDate);
System.out.println("sqlDate:" + sqlDate);

This gives me the following output:

 utilDate:Fri Apr 04 12:07:37 MSK 2014
 sqlDate:2014-04-04
Memo answered 4/4, 2014 at 8:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.