Чем Instant и LocalDateTime отличаются и когда брать Duration, а когда Period?
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?
Разбор темы
- Дата и время: java.time
Почему java.time вытеснил Date/Calendar, машинное (Instant) и человеческое (LocalDateTime) время, часовые пояса, Duration/Period и потокобезопасный DateTimeFormatter.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.