Как найти разницу между датами
Короткий ответ
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 — Промежуток времени в секундах и наносекундах — часы, минуты, секунды.