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

Что произойдёт при вызове date.plusDays(1) у объекта LocalDate?

JuniorДата и времяJava >=8
Ещё спрашивают так:
  • Чем java.time лучше Date и Calendar?
  • Чем LocalDateTime отличается от Instant и ZonedDateTime?
Коротко

Вернётся новый объект, исходный не изменится — все типы java.time неизменяемы.

  • Типичная ошибка: вызвать plusDays и не присвоить результат
  • Неизменяемость: безопасно делить между потоками и использовать как ключи

А ещё Выбор типа: LocalDate — дата без зоны, Instant — момент времени, ZonedDateTime — с часовым поясом

Подробно

LocalDate, LocalDateTime, Instant и другие типы java.time (Java 8) неизменяемы. Методы вроде plusDays, withMonth, minusHours возвращают новый объект. Поэтому date.plusDays(1); без присваивания ничего не меняет — частая ошибка новичков. Нужно date = date.plusDays(1);.

Неизменяемость решает проблемы старых Date и Calendar, которые менялись на месте: объект, переданный в чужой метод, могли незаметно изменить, а SimpleDateFormat был непотокобезопасным.

Основные типы:

  • LocalDate, LocalTime, LocalDateTime — дата и время «на стене», без часового пояса (день рождения, время открытия магазина);
  • Instant — точка на шкале времени в UTC (время события, метки в логах и базе);
  • ZonedDateTime — дата и время с часовым поясом и правилами перехода на летнее время;
  • Duration и Period — промежутки во времени и в календарных днях;
  • DateTimeFormatter — потокобезопасное форматирование.

Пример

LocalDate date = LocalDate.of(2026, 10, 10);
date.plusDays(1);              // результат потерян
date = date.plusDays(1);       // 2026-10-11

Instant now = Instant.now();
ZonedDateTime moscow = now.atZone(ZoneId.of("Europe/Moscow"));

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

  • Возвращается новый объект, исходный не меняется.
  • Ошибка с неприсвоенным результатом.
  • Преимущества неизменяемости.
  • Основные типы java.time — плюс.

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

  • Вызывать метод изменения и не присваивать результат.
  • Ожидать поведения старых изменяемых классов дат.

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

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

Показать варианты и ответ
  • ✗Исходный объект изменится, метод ничего не возвращает
  • ✓Вернётся новая дата, исходная не изменится
  • ✗Будет брошено исключение, если дата попадает на конец месяца
  • ✗Изменится исходный объект, и он же вернётся

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

  • Чем LocalDateTime отличается от ZonedDateTime?
  • Почему форматтер из новой библиотеки безопасен для нескольких потоков?

Разбор темы

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

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

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

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

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