ZonedDateTime.now(zone?) Создаёт
объект, соответствующий текущему моменту времени в указанной временной
зоне. Если зона не передана, используется системная.
ZonedDateTime.now() — текущий момент в системной
зонеZonedDateTime.now(ZoneId.of("Europe/Paris")) — текущий
момент в зоне ПарижаОсобенность: формирование происходит на основе системного
Instant, который затем интерпретируется в заданной
зоне.
ZonedDateTime.of(localDateTime, zone)
Создание через локальную дату и время с привязкой к зоне.
LocalDateTime как время в
зонеПример логики:
2025-05-01T10:00 + Europe/Berlin →
фиксированное зональное представлениеZonedDateTime.of(year, month, day, hour, minute, second, nano, zone)
Построение объекта из примитивных компонентов даты и времени.
Используется для явного конструирования значений без промежуточных объектов.
ZonedDateTime.ofStrict(localDateTime, zone, zoneOffset)
Более строгий вариант создания, требующий согласованности между
локальным временем, зоной и смещением.
Если данные не соответствуют правилам зоны (например, при переходе на летнее время), метод выбрасывает исключение.
ZonedDateTime.parse(text, formatter?)
Парсинг строки в ZonedDateTime.
DateTimeFormatterПримеры формата:
2025-03-10T12:30+03:00[Europe/Moscow]2025-03-10T12:30Z[UTC]ZonedDateTime.from(temporal) Создание
из любого совместимого временного объекта.
Поддерживает:
InstantOffsetDateTimeLocalDateTime (с зоной по умолчанию или явно
заданной)toInstant() Преобразует ZonedDateTime в
абсолютный момент времени (UTC).
Ключевая особенность:
toLocalDateTime() Возвращает локальную
дату и время без информации о зоне.
Используется, когда важна только календарная составляющая без смещения.
toLocalDate() Извлекает только
дату.
toLocalTime() Извлекает только время
суток без даты и зоны.
getZone() Возвращает текущую временную
зону объекта (ZoneId).
getOffset() Возвращает смещение
относительно UTC, соответствующее зоне в конкретный момент времени.
withZoneSameInstant(zone) Переводит
время в другую зону, сохраняя абсолютный момент времени.
Принцип работы:
InstantПример логики:
Это основной метод корректной конвертации между зонами.
withZoneSameLocal(zone) Меняет зону без
изменения локального времени.
Это означает:
Пример:
Используется редко, в основном для специальных сценариев интерпретации данных.
withFixedOffsetZone() Преобразует
ZonedDateTime в представление с фиксированным смещением (Offset),
устраняя правила временной зоны.
Результат:
ZonedDateTime наследует поведение неизменяемых типов: каждый метод возвращает новый объект.
Методы изменения даты:
withYear(year)withMonth(month)withDayOfMonth(day)withDayOfYear(dayOfYear)Методы изменения времени:
withHour(hour)withMinute(minute)withSecond(second)withNano(nano)Особенность: изменение компонентов может повлиять на валидность времени в зоне (например, при переходе на летнее время), что иногда приводит к сдвигу или исключению.
Все методы возвращают новый ZonedDateTime и работают через
корректировку Instant.
Добавление времени:
plusYears(value)plusMonths(value)plusWeeks(value)plusDays(value)plusHours(value)plusMinutes(value)plusSeconds(value)plusNanos(value)Вычитание времени:
minusYears(value)minusMonths(value)minusWeeks(value)minusDays(value)minusHours(value)minusMinutes(value)minusSeconds(value)minusNanos(value)Особенность ZonedDateTime:
isBefore(other) Проверяет, происходит
ли момент раньше другого.
isAfter(other) Проверяет, происходит ли
момент позже другого.
compareTo(other) Возвращает:
Сравнение выполняется по Instant, а не по локальному
времени.
equals(other) Сравнивает точное
совпадение:
Важно: два объекта с одинаковым instant, но разными зонами могут быть не равны.
format(formatter) Преобразует
ZonedDateTime в строку.
Использует DateTimeFormatter.
Примеры использования:
Особенности:
toOffsetDateTime() Преобразует
ZonedDateTime в OffsetDateTime.
Отличие:
truncatedTo(unit) Обрезает время до
указанной точности:
Пример:
ZonedDateTime поддерживает TemporalAdjuster, что
позволяет выполнять сложные трансформации:
Метод:
with(adjuster)ZonedDateTime объединяет три слоя:
LocalDateTime — календарное представлениеZoneId — правила регионаInstant — абсолютная точка времениПри каждом изменении происходит пересчёт одного из слоёв относительно других.
Ключевые последствия:
арифметика всегда приводит к корректировке instant
смена зоны может изменить локальное время
переходы DST могут вызывать:
nowofofStrictparsefromtoInstanttoLocalDateTimetoLocalDatetoLocalTimetoOffsetDateTimegetZonewithZoneSameInstantwithZoneSameLocalwithFixedOffsetZoneplus*minus*with* (дата, время)isBeforeisAftercompareToequalsformat