我有以下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天。为什么在比较中多了一天?我无法弄清楚如何进行准确的比较。
答案 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));
}