获取两个日期之间的一段时间

时间:2017-05-01 21:11:24

标签: java java-8 period

我使用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());
}

3 个答案:

答案 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;