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?

11
  • 5
    Well you're currently creating a java.sql.Timestamp - did you want that, or a java.sql.Date? They're different types... Commented Apr 4, 2014 at 8:06
  • 1
    Use a Calendar, set the millisecond to 0, the create your Timestamp from the calendar's time. Commented Apr 4, 2014 at 8:07
  • 1
    @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. Commented Apr 4, 2014 at 8:16
  • 2
    @Shitu: Right, so you don't want java.sql.Date at all. Please edit your post. Commented Apr 4, 2014 at 8:23
  • 2
    @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... Commented Apr 4, 2014 at 8:24

5 Answers 5

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
Sign up to request clarification or add additional context in comments.

Comments

15

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));

Comments

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

1 Comment

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.
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

1 Comment

please change Calender.MILISECONDS to Calendar.MILLISECOND that is the correct property
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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.