Как сравнить две даты
Короткий ответ
Используйте isBefore(), isAfter() и isEqual():
void main() {
var deadline = LocalDate.of(2026, 3, 31);
var today = LocalDate.of(2026, 3, 8);
IO.println(today.isBefore(deadline));
IO.println(today.isAfter(deadline));
IO.println(today.isEqual(LocalDate.of(2026, 3, 8)));
}Результат:
true
false
trueПопадает ли в диапазон
Проверьте обе границы. Условие !isBefore включает начальный день:
boolean inRange(LocalDate date, LocalDate from, LocalDate to) {
return !date.isBefore(from) && !date.isAfter(to);
}
void main() {
var from = LocalDate.of(2026, 7, 1);
var to = LocalDate.of(2026, 7, 14);
IO.println(inRange(LocalDate.of(2026, 7, 1), from, to));
IO.println(inRange(LocalDate.of(2026, 7, 15), from, to));
}Результат:
true
falseСортировка
Даты реализуют Comparable, поэтому сортируются без компаратора:
void main() {
var dates = new ArrayList<>(List.of(
LocalDate.of(2026, 5, 1), LocalDate.of(2025, 12, 31), LocalDate.of(2026, 1, 15)));
Collections.sort(dates);
IO.println(dates);
IO.println(Collections.max(dates));
}Результат:
[2025-12-31, 2026-01-15, 2026-05-01]
2026-05-01Дата со временем
Чтобы сравнить только даты у LocalDateTime, возьмите toLocalDate():
void main() {
var a = LocalDateTime.of(2026, 3, 8, 9, 0);
var b = LocalDateTime.of(2026, 3, 8, 18, 30);
IO.println(a.isEqual(b));
IO.println(a.toLocalDate().isEqual(b.toLocalDate()));
}Результат:
false
trueЧастая ошибка
Сравнивать даты через ==. Две одинаковые даты могут быть разными объектами:
void main() {
var a = LocalDate.parse("2026-03-08");
var b = LocalDate.of(2026, 3, 8);
IO.println(a == b);
IO.println(a.equals(b));
}Результат:
false
trueФункции из этого ответа
- LocalDate.of() — Создаёт дату из года, месяца и дня.