我使用java.time.Period#getDays()
来获取给定时段LocalDate
的天数。
它似乎适用于大多数情况,但整整一个月,我得到零天的时间。
以下测试用例失败(java.lang.AssertionError: expected:<30> but was:<0>
):
@Test
public void testOneMonthPeriodDays() {
Period p = Period.between(LocalDate.of(2017, 06, 01), LocalDate.of(2017, 07, 01));
assertEquals(30, p.getDays());
}
答案 0 :(得分:6)
我相信这是正确的结果。如果您运行以下测试,您将看到getMonths()返回1.似乎getDays没有得到总天数但得到余数天。
@Test
public void testOneMonthPeriodDays() {
Period p = Period.between(LocalDate.of(2017, 06, 01), LocalDate.of(2017, 07, 01));
assertEquals(0, p.getDays());
assertEquals(1, p.getMonths());
}
要获取两个日期之间的总天数,请参阅此问题Calculate days between two dates in Java 8
引用该问题中给出的答案:
LocalDate dateBefore;
LocalDate dateAfter;
long daysBetween = DAYS.between(dateBefore, dateAfter);
答案 1 :(得分:4)
java.time.Period#getDays()
的JavaDoc说:
返回此期间的天数,可能是负数
我猜这是误导性的,它并没有真正返回总天数。
我现在用
final long daysElapsed = ChronoUnit.DAYS.between(LocalDate.of(2017, 06, 01), LocalDate.of(2017, 07, 01));
按预期工作。
答案 2 :(得分:0)
执行以下操作:
long daysDifference = DAYS.between(dayInitial,dayAfter);
其中:
LocalDate dateInitial; LocalDate dateAfter;