Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сравнить две даты

Короткий ответ

Используйте 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() — Создаёт дату из года, месяца и дня.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.