使用创建 OffsetDateTime 对象
- ofInstant(instant, zoneid) 或通过
- 流畅的界面
如果通过流畅接口的实例化跨越夏令时边界,则可能导致不相等的对象(通过使用 compareTo 断言或比较 ZoneOffset 和 LocalDateTime 字段)。考虑以下示例:
OffsetDateTime inAMonth = OffsetDateTime.now().plusMonths(1);
OffsetDateTime inAMonth2 = OffsetDateTime.ofInstant(inAMonth.toInstant(), ZoneId.systemDefault());
在 10 月中旬的中欧(ZoneId 'Europe/Berlin'),由于plusMonths()
重新使用offset
初始调用 ( now()
),这将产生两个不相等的对象。
有谁知道为什么不重新计算偏移量?
我在单元测试期间遇到了这个问题,我能想出的唯一解决方法是 a) 不使用 fluent 接口或 b) 在使用 fluent 接口时避免使用跨 DST 跳转。不幸的是,使用 OffsetDateTime 以外的东西不是一种选择。