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