how to create a Java Date object of midnight today and midnight tomorrow?
The easiest way to find a midnight:
Long time = new Date().getTime();
Date date = new Date(time - time % (24 * 60 * 60 * 1000));
Next day:
Date date = new Date(date.getTime() + 24 * 60 * 60 * 1000);
For sake of completeness, if you are using Java 8 you can also use the truncatedTo
method of the Instant
class to get midnight in UTC.
Instant.now().truncatedTo(ChronoUnit.DAYS);
As written in the Javadoc
For example, truncating with the MINUTES unit will round down to the nearest minute, setting the seconds and nanoseconds to zero.
Hope it helps.
java.util.Calendar
// today
Calendar date = new GregorianCalendar();
// reset hour, minutes, seconds and millis
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
// next day
date.add(Calendar.DAY_OF_MONTH, 1);
JDK 8 - java.time.LocalTime and java.time.LocalDate
LocalTime midnight = LocalTime.MIDNIGHT;
LocalDate today = LocalDate.now(ZoneId.of("Europe/Berlin"));
LocalDateTime todayMidnight = LocalDateTime.of(today, midnight);
LocalDateTime tomorrowMidnight = todayMidnight.plusDays(1);
Joda-Time
If you're using a JDK < 8, I recommend Joda Time, because the API is really nice:
DateTime date = new DateTime().toDateMidnight().toDateTime();
DateTime tomorrow = date.plusDays(1);
Since version 2.3 of Joda Time DateMidnight
is deprecated, so use this:
DateTime today = new DateTime().withTimeAtStartOfDay();
DateTime tomorrow = today.plusDays(1).withTimeAtStartOfDay();
Pass a time zone if you don't want the JVM’s current default time zone.
DateTimeZone timeZone = DateTimeZone.forID("America/Montreal");
DateTime today = new DateTime(timeZone).withTimeAtStartOfDay(); // Pass time zone to constructor.