Операции с датой и временем

Базовый Java
≈ 2 мин чтения

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);
Не переводить календарную задачу в миллисекунды без необходимости. Месяцы, годы и локальные дни подчиняются календарю и правилам часового пояса. Числовая арифметика удобна для точных длительностей, но не заменяет календарную модель.