在下面的输出部分中,显示的“中间时间”为零。预期结果是一个非零值。
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/