Gymterview
junior

Что такое ZonedDateTime?

ZonedDateTime — класс из java.time, представляющий дату и время с полной информацией о часовом поясе. Это аналог java.util.Calendar из старого API, но неизменяемый и потокобезопасный. Включает LocalDateTime + ZoneId + ZoneOffset, что позволяет корректно обрабатывать переходы на летнее/зимнее время.

Пример
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime moscow = ZonedDateTime.now(ZoneId.of("Europe/Moscow"));
ZonedDateTime fromLocal = LocalDateTime.now().atZone(ZoneId.of("UTC"));

ZonedDateTime используется, когда важно точно определить момент времени с учётом часового пояса: планирование встреч в разных зонах, работа с международными пользователями, конвертация между зонами. Для хранения в базе данных обычно используют Instant (UTC timestamp), а ZonedDateTime — для отображения пользователю.

На собеседовании: объясните разницу между ZonedDateTime, OffsetDateTime и LocalDateTime: ZonedDateTime содержит полную информацию о часовом поясе (включая правила перехода DST), OffsetDateTime — только смещение (например, +03:00), LocalDateTime — без зоны вообще.