Вот решение на основе Java 8, использующее новый java.time пакет ( Tutorial ).
Если вы можете использовать объекты Java 8 в своем коде , используйте LocalDateTime
:
LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();
Если вам требуются устаревшие даты, т.е. java.util.Date
:
Преобразуйте LocalDateTime
, который вы создали выше, в Date
, используя следующие преобразования:
LocalDateTime
-> ZonedDateTime
-> Instant
-> Date
Вызовите atZone(zone)
с указанным часовым поясом (или ZoneId.systemDefault()
для системного часового пояса по умолчанию), чтобы создать объект ZonedDateTime
, настроенный для DST при необходимости.
ZonedDateTime zdt = midnight.atZone(ZoneId.of("America/Montreal"));
Позвоните toInstant()
, чтобы преобразовать ZonedDateTime
в Instant
:
Instant i = zdt.toInstant()
Наконец, позвоните Date.from(instant)
, чтобы преобразовать Instant
в Date
:
Date d1 = Date.from(i)
В итоге для вас это будет выглядеть примерно так:
LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();
Date d1 = Date.from(midnight.atZone(ZoneId.systemDefault()).toInstant());
Date d2 = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
См. Также раздел Устаревший код даты и времени (Учебные руководства по Java ™) о совместимости новой функциональности java.time
с унаследованными java.util
классами.