Мгновение - это момент на временной шкале. Это зависит от того, хотите ли вы учитывать изменения часового пояса и летнего времени или нет.
Если вас не волнует часовой пояс или летнее время, вы можете сделать
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()
один раз, иначе в крайних случаях вы можете получить неверные результаты.