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

时间:2015-06-14 19:27:12

标签: java java-8

对于以下Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 9, 2)) 计算:

P1M1D

结果是:

Period

这相当于31天+ 1天= 32天。

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

P2M1D

结果是:

java.time

这相当于:31天(8月)+ 30天(9月)+ 1(10月)= 62天

Period包中是否有一个方法可以给出if(mViewpager.getTag().equals("portrait")) // is in portrait else // is in landscape 中的天数?我找不到一个。不确定我是否忽略了任何东西,或者它是否只是在那里。

3 个答案:

答案 0 :(得分:68)

来自documentation

  

使用基于日期的值定义时间量(年,月,   天),使用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)

答案 1 :(得分:15)

没有办法按你的要求做。原因是Period无法推断出该期间的实际日历天数。 Period与特定日期无关,一旦按照您展示的方式构建,就会失去对实际日历日期的跟踪。

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

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

答案 2 :(得分:4)

根据您想要处理的时间量,有一个特定的对象。 这个页面here非常有用,可以解释哪种情况最适合您的情况。

  

当您想要仅在一个单位时间内测量一段时间时,ChronoUnit.between方法非常有用

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