获取两个日期之间的天数

Get a Period of Days between two Dates

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

我相信这是正确的结果。如果你 运行 下面的测试你会看到 getMonths() returns 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);

请注意 DAYS is member of java.time.temporal.ChronoUnit 枚举。

java.time.Period#getDays() 的 JavaDoc 说:

returns the amount of days of this period, may be negative

我猜这是一种误导,它并不是真正的 return 总天数。

我现在用

final long daysElapsed = ChronoUnit.DAYS.between(LocalDate.of(2017, 06, 01), LocalDate.of(2017, 07, 01));

按预期工作。

执行以下操作:

long daysDifference = DAYS.between(dayInitial, dayAfter);

其中:

LocalDate dateInitial;   //initial date
LocalDate dateAfter;      //later date