gpt4 book ai didi

datetime - 为什么输出中出现负号?

转载 作者:行者123 更新时间:2023-12-02 20:22:21 25 4
gpt4 key购买 nike

我有以下几行代码:

LocalDateTime ldt = LocalDateTime.of(2017, 06, 02, 6, 0, 0);
ZoneOffset nyOffset = ZoneOffset.ofHoursMinutes(-5, 0);
ZoneId nyZone = ZoneId.of("America/New_York");
OffsetDateTime nyOdt = ldt.atOffset(nyOffset);
ZonedDateTime nyZdt = ldt.atZone(nyZone);
Duration d = Duration.between(nyOdt, nyZdt);
System.out.println(d);

输出为PT-1H。为什么会发生这种情况? nyZdt 不在 nyOdt 之前。我错了吗?

最佳答案

如果您打印日期和两者相应的 UTC Instant,这会变得更加清晰:

System.out.println(nyOdt);
System.out.println(nyZdt);
System.out.println(nyOdt.toInstant());
System.out.println(nyZdt.toInstant());

这将打印:

2017-06-02T06:00-05:00
2017-06-02T06:00-04:00[America/New_York]
2017-06-02T11:00:00Z
2017-06-02T10:00:00Z

请注意,nyOdt 使用的是偏移量 -05:00(比 UTC 晚 5 小时),但 nyZdt 使用的是 -04 :00(由于 Daylight Saving Time in New York ,比 UTC 晚 4 小时)。

将它们转换为 Instant,您可以看到 nyOdt 相当于 UTC 上午 11 点,nyZdt 相当于 10 UTC 时间上午。这就是为什么两者之间的差异是负一小时:Duration. Between() 返回负持续时间 if the first parameter is after the second (并且 nyOdt.toInstant().isAfter(nyZdt.toInstant()) 返回 true)。

关于datetime - 为什么输出中出现负号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46286988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com