Подтвердить что ты не робот

Как рассчитать количество дней в периоде?

Для следующего расчета Period:

Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 9, 2))

результат:

P1M1D

Это эквивалентно 31 дней + 1 день = 32 дня.

Для этого Period:

Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 10, 2))

результат:

P2M1D

Это эквивалентно: 31 день (в августе) + 30 дней (в сентябре) + 1 (в октябре) = 62 дня

Есть ли метод в пакете java.time, который даст количество дней в Period? Я не могу его найти. Не уверен, что я упустил что-либо или просто нет.

4b9b3361

Ответ 1

Из документации:

Чтобы определить количество времени с датами (годы, месяцы, дней), используйте класс Period. Класс Period предоставляет различные методы, такие как getMonths, getDays и getYears. Чтобы представить количество > времени, измеренное за одну единицу времени, например дни, вы можете использовать ChronoUnit.between.

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
                   " months, and " + p.getDays() +
                   " days old. (" + p2 + " days total)");

Код производит вывод, аналогичный следующему:

You are 53 years, 4 months, and 29 days old. (19508 days total)

Ответ 2

Нет способа сделать то, что вы просите. Причина в том, что из Period невозможно определить фактическое количество календарных дней в периоде. A Period не привязан к конкретным датам, как только он создан так, как вы показываете, он теряет отслеживание фактических дат календаря.

Например, ваш первый период представляет собой период 1 месяц и 1 день. Но период не волнует, в каком месяце. Это просто понятие "месяц и день".

Если вам нужно количество дней между двумя датами, вы должны использовать ChronoUnit.DAYS.between, как пишет Saket Mittal.

Ответ 3

Существует конкретный объект, зависящий от времени, с которым вы хотели бы иметь дело. Эта страница здесь очень полезна, объясняя, что лучше всего подходит для вашего сценария.

Метод ChronoUnit.between полезен, когда вы хотите измерять количество времени за одну единицу времени, например дни или секунды

LocalDate localDateStartDate = LocalDate.of(2016, 06, 10);
LocalDate localDateEndDate = LocalDate.of(2016,06,23);
long days = ChronoUnit.DAYS.between(localDateStartDate, localDateEndDate);