Получить доступ

Чем 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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

Показать варианты и ответ
  • ✓Instant — момент на шкале (UTC, эпоха); LocalDateTime — дата-время БЕЗ зоны. Duration — машинное время (секунды/нано), Period — календарные единицы (годы/месяцы/дни)
  • ✗Instant и LocalDateTime — синонимы; Duration и Period тоже
  • ✗LocalDateTime хранит зону, а Instant — нет
  • ✗Period измеряет секунды, Duration — месяцы

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем