2015-06-14 3 views
19

Для следующего расчета 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? Я не могу его найти. Не уверен, что я что-то упустил или просто нет.

+0

Период есть метод 'долго получить (TemporalUnit unit) ', TemporalUnit может быть ChronoUnit.DAYS – Cyrbil

+2

@cyrbil, но это не делает то, что ОП спрашивает, попробуйте и посмотрите. –

ответ

42

От documentation:

Чтобы определить количество времени со значениями на основе даты (годы, месяцы, дней), используйте 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) 
+4

https://docs.oracle.com/javase/tutorial/datetime/iso/period.html –

+4

Почему они не поместили этот метод в 'Period'? – Carcamano

+0

« сумма> времени »исправить форматирование пожалуйста – Roland

6

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

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

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

+0

Да , Я это понял. Я просто хотел узнать, как восстановить потерянную информацию, чтобы я мог рассчитать количество дней. Благодарю. –

1

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

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

LocalDate localDateStartDate = LocalDate.of(2016, 06, 10); 
LocalDate localDateEndDate = LocalDate.of(2016,06,23); 
long days = ChronoUnit.DAYS.between(localDateStartDate, localDateEndDate); 
Смежные вопросы