如何计算一段时间内的天数?

对于以下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天(8月)+ 30天(9月)+ 1(10月)= 62天

java.time包中是否有一个方法可以给出一个Period的天数? 我找不到一个。 不确定我是否忽略了任何东西,或者它是否只是在那里。

从文档 :

要使用基于日期的值(年,月,日)定义时间量,请使用Period类。 Period类提供了各种get方法,例如getMonthsgetDaysgetYears 。要显示在单个时间单位(例如天)中测量的时间量,您可以使用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) 

没有办法按你的要求做。 原因是从一个Period推断出该Period的实际日历天数是不可能的。 Period与特定日期无关,一旦按照您显示的方式构建,它将失去对实际日历日期的跟踪。

例如,您的第一个期间代表1个月和1天的期间。 但这个时期并不关心哪一个月。 它只是“一个月,一天”的概念。

如果你需要两个日期之间的天数,你应该使用ChronoUnit.DAYS.between作为Saket Mittal写道。

根据您想要处理的时间量,有一个特定的对象。 这里的这个页面非常有用,解释哪个最适合您的场景。

当您想要仅在一个单位时间内测量时间量时,ChronoUnit.between方法很有用,例如天或秒

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