Java 8 раз API - Instant.now(часы) против LocaldateTime.now(часы)

Для следующего кода для Java 8

  1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); 
  2. System.out.println(Instant.now(Clock.systemDefaultZone()));

Строка 1 печатает текущее время, добавляя смещение, но строка 2 печатает текущее время без добавления смещения.

Я проверил исходный код обоих и обнаружил, что LocaDateTime.now(clock) вернуть clock.instant() время возврата, добавив смещение, но Instant.now(clock) не делаю так.

Почему это так? Разве мы не ожидаем одинакового результата в обоих случаях?

1 ответ

Решение

ОБНОВЛЕНИЕ: Instant не имеет ничего общего с UTC в смысле часового пояса. Это связано с UTC только в качестве стандарта времени.

Основным отличием является тип возвращаемого значения. Они имеют разные представления String, потому что сами типы имеют очень разные значения.

Instant # now (Часы) возвращает Instant. Момент - это "мгновенная точка на временной шкале".

LocalDate #now(Clock) возвращает LocalDate. LocalTime - это "описание местного времени, отображаемого на настенных часах".

В результате Instant #now(Clock) и LocalDate #now(Clock) означают совершенно разные вещи и, естественно, имеют разные результаты. Главное, что у них общего, - это имя. Названия методов - пыль. Обратитесь к типам.

На фиксированных часах и Instant.now(часы), и LocalDate.now(часы) будут возвращать постоянные значения. Точка принятия Clock в качестве параметра заключается в возможности контролировать такие вещи, как эталонное время или разрешение часов.

Другие вопросы по тегам