Encodera

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

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

Как найти разницу между датами

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

ChronoUnit.DAYS.between() возвращает количество дней между двумя датами:

void main() {
    var start = LocalDate.of(2026, 1, 1);
    var end = LocalDate.of(2026, 3, 8);
 
    IO.println(ChronoUnit.DAYS.between(start, end));
}

Результат:

66

Годы, месяцы, дни

Period раскладывает разницу на годы, месяцы и дни:

void main() {
    var period = Period.between(LocalDate.of(2023, 11, 20), LocalDate.of(2026, 3, 8));
 
    IO.println(period);
    IO.println(period.getYears() + " years, " + period.getMonths() + " months, " + period.getDays() + " days");
}

Результат:

P2Y3M16D
2 years, 3 months, 16 days

Часы и минуты

Для времени используйте Duration:

void main() {
    var start = LocalDateTime.of(2026, 3, 8, 9, 15);
    var end = LocalDateTime.of(2026, 3, 8, 17, 40);
    var duration = Duration.between(start, end);
 
    IO.println(duration);
    IO.println(duration.toHours() + " h " + duration.toMinutesPart() + " min");
}

Результат:

PT8H25M
8 h 25 min

Другие единицы

ChronoUnit умеет считать недели, месяцы и годы:

void main() {
    var start = LocalDate.of(2026, 1, 31);
    var end = LocalDate.of(2026, 12, 25);
 
    IO.println(ChronoUnit.WEEKS.between(start, end));
    IO.println(ChronoUnit.MONTHS.between(start, end));
}

Результат:

46
10

Частая ошибка

Взять getDays() у Period как общее количество дней. Это только остаток дней после лет и месяцев:

void main() {
    var start = LocalDate.of(2026, 1, 1);
    var end = LocalDate.of(2026, 3, 8);
 
    IO.println(Period.between(start, end).getDays());
    IO.println(ChronoUnit.DAYS.between(start, end));
}

Результат:

7
66

Функции из этого ответа

  • ChronoUnit.between() — Считает количество целых единиц (дней, месяцев, часов) между двумя датами или моментами.
  • Period — Календарный промежуток в годах, месяцах и днях — например, возраст.
  • Duration — Промежуток времени в секундах и наносекундах — часы, минуты, секунды.

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

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