Чем LocalDateTime отличается от ZonedDateTime?
LocalDateTime — дата и время без зоны: «15 марта, 09:00» неизвестно где. ZonedDateTime — с ZoneId и правилами перехода на летнее время: конкретный момент. Instant — момент на шкале UTC.
- LocalDateTime — расписания и «будильники»: каждый день в 09:00 по местному
- Момент события — Instant или ZonedDateTime
- ZonedDateTime учитывает летнее время, OffsetDateTime — только смещение
А ещё В БД момент хранят как timestamptz, а LocalDateTime как timestamp without time zone
Подробно
LocalDateTime подходит для расписаний вроде 'каждый день в 09:00'. Для реального момента события нужен Instant или ZonedDateTime, иначе непонятно, какой это момент в UTC.
Что хотят услышать
- Различие и когда что.
- Роль Instant.
Частые ошибки
- Хранить глобальные timestamps в LocalDateTime без зоны.
- Игнорировать переходы DST.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Оба хранят момент в UTC одинаково
- ✓LocalDateTime — без пояса; ZonedDateTime — с поясом и летним временем
- ✗LocalDateTime хранит часовой пояс системы, а ZonedDateTime — только смещение UTC
- ✗ZonedDateTime не учитывает часовые пояса
Что спросят дальше
- Когда использовать OffsetDateTime?
- Как хранить время в БД?
Разбор темы
- Дата и время: java.time
Почему java.time вытеснил Date/Calendar, машинное (Instant) и человеческое (LocalDateTime) время, часовые пояса, Duration/Period и потокобезопасный DateTimeFormatter.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.