Вопрос с собеседования · Java

Чем Instant и LocalDateTime отличаются и когда брать Duration, а когда Period?

MiddleДата и время
Коротко

Instant — момент на шкале (UTC, от эпохи); LocalDateTime — дата и время без зоны, моментом не является. Duration — машинное время в секундах и наносекундах, Period — календарные годы, месяцы, дни.

  • В день перехода на летнее время plus(Period.ofDays(1)) и plus(Duration.ofDays(1)) дают разное
  • Duration — таймауты, замеры; Period — «через месяц», возраст
  • Period.between для дат, Duration.between для моментов

А ещё Для замеров производительности — System.nanoTime, а не Instant

Подробно

Instant — точка на глобальной шкале (эпоха, UTC), удобна для хранения и сравнения. LocalDateTime не задаёт момент, пока не привязан к зоне (ZonedDateTime). Duration измеряет машинное время в секундах/наносекундах, Period — календарные единицы; на стыке перехода на летнее время Period.ofDays(1) и Duration.ofHours(24) могут дать разный результат — поэтому тип берут по смыслу.

Что хотят услышать

  • Instant против LocalDateTime.
  • Duration против Period с примером.

Частые ошибки

  • Считать LocalDateTime конкретным моментом без зоны.
  • Мерить календарные интервалы через Duration.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗LocalDateTime хранит зону, а Instant — нет
  • ✗Period измеряет секунды, Duration — месяцы
  • ✓Instant — момент в UTC, LocalDateTime — без зоны; Duration — время, Period — дни и месяцы
  • ✗Instant и LocalDateTime — синонимы; Duration и Period тоже

Что спросят дальше

  • Зачем хранить моменты в UTC?
  • Что добавляет ZonedDateTime к LocalDateTime?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования