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 в качестве параметра заключается в возможности контролировать такие вещи, как эталонное время или разрешение часов.