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 天。为什么比较中有额外的一天?我无法弄清楚如何进行准确的比较。
解决方案
我认为您正在暴露一些您不知道的转换,方法是强制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));
}
推荐阅读
- git - 在我正在完成一些工作的功能分支上为 github 开发一个分叉的 repo
- list - 使用所有可能性在 Haskell 中旋转列表
- jquery - 一次将 4 个 div (从 div 列表中)附加到单独的 div 中
- postgresql - postgres的右连接返回意外结果
- javascript - 可以在字符串上使用 for in 循环吗?
- python - 日期是列,时间是行。我无法同步两者
- javascript - Vuex getter 反应性问题(结合 Vue 路由器)
- internet-explorer - ie 11 最新版本在屏幕后面打开弹幕
- html - 如何更改 pickerInput 元素的容器颜色?
- powerbi - 具有用户输入的 DAX PowerBI 平均值总和