Операции с датой и временем
Plus и minus возвращают новые значения
С датами и временем регулярно приходится двигаться вперёд и назад:
назначить дедлайн через неделю, получить начало следующего месяца,
вычесть 30 минут или сравнить две даты. В java.time
для этого используются методы plus... и minus....
LocalDate date = LocalDate.of(2026, 9, 18);
LocalDate nextWeek = date.plusWeeks(1);
LocalDate previousMonth = date.minusMonths(1);
Исходный объект не меняется. Это та же модель неизменяемости, с которой мы уже познакомились на основных классах даты и времени.
Календарная арифметика учитывает реальную дату
Добавление месяца — не то же самое, что прибавление фиксированного числа дней. Если целевой месяц короче, Java корректирует день до последнего допустимого значения.
LocalDate date = LocalDate.of(2026, 1, 31);
LocalDate result = date.plusMonths(1);
System.out.println(result); // 2026-02-28
Это делает код ближе к бизнес-формулировкам вроде «через месяц», но одновременно требует понимать, что календарные единицы не имеют фиксированной длины в секундах.
Сравнение
Для дат и временных значений есть методы
isBefore(), isAfter() и isEqual().
Они обычно читаются понятнее, чем ручная работа с результатом compareTo().
LocalDate deadline = LocalDate.of(2026, 9, 30);
LocalDate today = LocalDate.of(2026, 9, 18);
if (today.isBefore(deadline)) {
System.out.println("There is still time");
}
Расстояние между значениями
Для конкретных задач удобно использовать уже знакомые классы интервалов.
Duration.between() измеряет временную длительность,
а Period.between() — календарную разницу между датами.
LocalDate start = LocalDate.of(2026, 9, 18);
LocalDate end = LocalDate.of(2026, 12, 25);
Period period = Period.between(start, end);
Меняем отдельное поле через with
Методы with... создают копию значения с заменённым компонентом.
LocalDate date = LocalDate.of(2026, 9, 18);
LocalDate firstDay = date.withDayOfMonth(1);