Unfortunately Date object doesn't provide a way to truncate a date effectively removing its time (resetting to 0) easily.
My first try is to use Calendar and set the hour, minute, second and millisecond fields to 0.
Calendar calendar = Calendar.getInstance();
calendar.setTime(theDate);
calendar.set(Calendar.HOUR, 0);
.... same with min, sec, mil.
Then came up DateUtils from apache common lang, interesting utility, but the javadoc doesn't explain much on how truncating the time and strangely it choose instead to pick parameter which is specified as the most significant field to preserve(when all I want to do is to remove the time).
Anyway after trial-error, here is the code I came up with :
DateUtils.truncate(theDate, Calendar.DATE);
I was expecting only date is preserved, month and anything else will be gone, but it works! Thanks to DateUtils.
Friday, October 19, 2007
Subscribe to:
Post Comments (Atom)
5 comments:
I'm new to java, but very experienced in oracle and dot.net. I thought that for all these years java is mature and well designed language and classes, but now I think java people should come with much much better and more straightforward solution for dates, as they exists both in oracle and in .net already. So simple and so effective. But in java - no!
For example, to compare two datetime-s in oracle for equality only by date portion, expression is "trunc(date1)=trunc(date2)". In java, i should write 10 lines of code or using some trird-party solutions for such an essential thing! It's a real shame for java.
Hi Vedran,
Your comment is very useful here, thanks for the contribution!
Just what I was looking for. Thanks.
You may want use Calendar.HOUR_OF_DAY
DateUtils.trucate() does not work properly with daylight saving time.
e.g.:
DateUtils.truncate(date, Calendar.DATE);
Instead of showing 10/10/2010, it shows 09/10/2010 23:00:00.
Post a Comment