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

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

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

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

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

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

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

Подробно

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 — плюс.

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

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

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

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

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

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

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

Разбор темы

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

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

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

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

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