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

ker*_*000 5 java period java-8

java.time.Period#getDays()用来获得给定时期LocalDates 的天数.

它似乎适用于大多数情况,但整整一个月,我得到零天的时间.

以下测试用例失败(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());
}
Run Code Online (Sandbox Code Playgroud)

bhs*_*cer 7

我相信这是正确的结果.如果您运行以下测试,您将看到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());
}
Run Code Online (Sandbox Code Playgroud)

要获取两个日期之间的总天数,请参阅此问题计算Java 8中两个日期之间的天数

引用该问题中给出的答案:

LocalDate dateBefore;
LocalDate dateAfter;
long daysBetween = DAYS.between(dateBefore, dateAfter);
Run Code Online (Sandbox Code Playgroud)

  • 因为它已经存在,显示该问题的链接不是更好吗? (2认同)

ker*_*000 5

JavaDoc forjava.time.Period#getDays()说:

返回此期间的天数,可能为负数

我想这是误导,它并没有真正返回总天数。

我现在用

final long daysElapsed = ChronoUnit.DAYS.between(LocalDate.of(2017, 06, 01), LocalDate.of(2017, 07, 01));
Run Code Online (Sandbox Code Playgroud)

它按预期工作。