Java Получить время между 00:00:00 HRS и сейчас - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь получить время ч / б 00:00:00 часов текущего дня и Instant.now ()

Instant startTime = Instant.now().minus(Duration.ofMinutes(????))
Instant endTime = Instant.now();

Что я должен передать здесь, чтобы получить 00:00 : 00 Часы текущего дня?

1 Ответ

4 голосов
/ 17 июня 2020

Мгновение - это момент на временной шкале. Это зависит от того, хотите ли вы учитывать изменения часового пояса и летнего времени или нет.

Если вас не волнует часовой пояс или летнее время, вы можете сделать

LocalDateTime now = LocalDateTime.now();
ChronoUnit.HOURS.between(now.toLocalDate().atStartOfDay(), now);

Возвращаемое long - количество часов между полуночью и текущим временем. В большинстве случаев это будет номер часа, отображаемый на ваших настенных часах. Также обратите внимание, что этот фрагмент кода не использует Instant, поскольку и Instant не знает о человеческом представлении времени, например, 00:00:00 полночь.

Если вам важен часовой пояс или DST , то вам необходимо указать часовой пояс, чтобы отрегулировать время. Например, в часовом поясе Europe/Amsterdam 29 марта 2020 г. в 02:00 по настенным часам часы пропускают 1 час из-за перехода на летнее время (так называемое «zomertijd» или «летнее время»), поэтому, если now - это 14: 39 время настенных часов, количество часов с полуночи не 14, а 13.

Затем вы можете сделать что-то вроде этого:

ZoneId zone = ...
Instant now = Instant.now();
Instant midnight = now.atZone(zone).toLocalDate().atStartOfDay(zone).toInstant();
long result = ChronoUnit.MINUTES.between(midnight, now);

Убедитесь, что вы запросили now() один раз, иначе в крайних случаях вы можете получить неверные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...