为什么两个日期之间的差额又增加了一天?

时间:2018-11-25 00:51:05

标签: java

我有以下Instant对象

Instant instant = Instant.parse("2018-11-29T00:00:00.00Z");
verify(instant, 5);

今天的日期是2018年11月24日。我想编写一种方法来验证instant距离今天还有5天。方法如下:

public void verify(Instant instant, int offsetInDays)
{
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
    LocalDate endDate = LocalDate.from(localDateTime);
    LocalDate now = LocalDate.now();
    assertEquals(offsetInDays, ChronoUnit.DAYS.between(now, endDate));
}

应该断言5等于5,但是ChronoUnit.DAYS.between(now, endDate)返回6天。为什么在比较中多了一天?我无法弄清楚如何进行准确的比较。

1 个答案:

答案 0 :(得分:1)

我认为您是在UTC的第一行中强制verify(),然后将其转换为LocalDate,从而暴露了一些您不知道的转换。无论我的计算机涉及哪个时区,此方法都可以工作。

public void verify(Instant instant, int offsetInDays)
{
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
    LocalDateTime endDate = localDateTime.plusDays(offsetInDays);
    assertEquals(offsetInDays, ChronoUnit.DAYS.between(localDateTime, endDate));
}