获取两个日期之间的天数
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
我使用 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