Количество дней между двумя датами в Java

В Java мы можем использовать методы ChronoUnit и LocalDate.until() для вычисления количества дней между двумя заданными датами. Существуют и другие решения, но эти самые простые и не требуют импорта дополнительной библиотеки.

1. Использование ChronoUnit для определения количества дней между двумя датами

Использование ChronoUnit.DAYS.between() API является самым простым из всех решений. Этот API подсчитывает дни с Epoch до обоих экземпляров LocalDate и вычитает их. Внутренне это так же просто, как date1.toEpochDay() – date2.toEpochDay().

Обратите внимание, что startDate — «включительно», а endDate — «исключительно».

LocalDate start = LocalDate.parse("2023-06-01"); // InclusiveLocalDate end = LocalDate.parse("2023-06-15"); // Exclusivelong diffInDays = ChronoUnit.DAYS.between(start, end);System.out.println(diffInDays); //14

В приведенном выше примере мы вычислили разницу между двумя экземплярами LocalDate в днях. Мы можем использовать аналогичный подход и для других классов Date/time. Например, мы использовали API ChronoUnit.DAYS.between() с экземплярами LocalDateTime.

LocalDateTime startLdt = LocalDateTime.parse("2023-06-01T02:00:00");LocalDateTime endLdt = LocalDateTime.parse("2023-06-15T03:00:00");long diffInDays = ChronoUnit.DAYS.between(startLdt, endLdt);System.out.println(diffInDays); //14

2. Использование LocalDate.until()

Это решение очень похоже на использование ChronoUnit. И внутри оно также использует ту же технику, что и выше, т.е. date1.toEpochDay() – date2.toEpochDay().

Обратите внимание, что мы можем использовать метод until() и с другими временными классами, такими как LocalDateTime и ZonedDateTime.

LocalDate start = LocalDate.parse("2023-06-01");LocalDate end = LocalDate.parse("2023-06-15");long diffInDays = start.until(end, ChronoUnit.DAYS);System.out.println(diffInDays); //14

3. Избегайте использования класса Period

Предупреждение. Если мы не передадим ChronoUnit.DAYS в приведенном выше примере, метод until() вернет экземпляр Period, который мы можем использовать для получения разницы в днях.

Но помните, класс Period представляет разницу дней в формате «x лет, y месяцев и z дней». Его метод getDays() возвращает только часть «z дней». Поэтому, если разница дат больше 28 дней, вы можете получить неверные результаты.

 LocalDate начало = LocalDate.parse("2023-06-01");LocalDate end = LocalDate.parse("2023-07-20");long diffInDays = ChronoUnit.DAYS.between(начало, конец);System.out.println(diffInDays); //49 - Правильный результатПериод период = начало.до(конец);System.out.println(period.getDays()); //14 - Неверный результат

Напишите мне ваши вопросы, связанные с расчетом количества дней между двумя датами в Java.

Исходный код Скачать

Прокрутить вверх