java - Duration.toHours 返回零

标签 java java-time zoneddatetime

在下面的输出部分中,显示的“中间时间”为零。预期结果是一个非零值。

Java 代码:

ZonedDateTime zdt1 = ZonedDateTime.now(ZoneId.of("Asia/Calcutta"));
ZonedDateTime zdt2 = ZonedDateTime.now(ZoneId.of("America/Toronto"));
Duration duration2 = Duration.between(zdt1, zdt2);

System.out.format("ZonedDateTime 1 %s\n", zdt1);
System.out.format("ZonedDateTime 2 %s\n", zdt2);
System.out.format("Hours in between %d\n", duration2.toHours());

输出:

ZonedDateTime 1 2021-11-10T16:44:38.237844+05:30[Asia/Calcutta]
ZonedDateTime 2 2021-11-10T06:14:38.239340-05:00[America/Toronto]
Hours in between 0

最佳答案

它是零,因为你实际上是在比较“现在”和“现在”。这些 ZonedDateTime 对象位于不同区域的事实是无关紧要的,因为它们是时区感知的 - 它们指向同一时刻。

如果您想比较每个时区本地时间之间的小时数,可以通过将它们转换为LocalDateTime对象来实现:

Duration duration2 = Duration.between(zdt1.toLocalDateTime(), zdt2.toLocalDateTime());

...这会给你-10。

关于java - Duration.toHours 返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69912421/

相关文章:

java - XWPFTableCell 删除 bodyElement(表)

java - 无法安装 eclipse IDE - 缺少 JRE。无法打开文件

java - 如何将日期截断/跨度为一个时间间隔?

java - 将字符串 ("2022-12-23T07:20:00") 时间转换为 ZonedDateTime

java - 使用 Java 反射,你能检测一个方法是否是 Native 的吗?

java - 如何设置切换 boolean 变量状态的按键检测

java - Spring boot 2 : ConverterNotFoundException: No converter found capable of converting from type [java. time.ZonedDateTime] 输入 [java.util.Date]

java ZonedDateTime 毫秒部分解析错误

java - 混淆 Java 时间解析 UTC

java - 在 Duration 步骤中迭代 ZonedDateTime 间隔