首页 > 解决方案 > 为什么两个日期之间的差异会返回额外的一天?

问题描述

我有以下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 天。为什么比较中有额外的一天?我无法弄清楚如何进行准确的比较。

标签: java

解决方案


我认为您正在暴露一些您不知道的转换,方法是强制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));
}

推荐阅读