Что такое 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— без зоны вообще.