Ock*_*Ock 5 java datetime duration timezone-offset jsr310
我正在准备 Java OCP 测试,在模拟测试中有一个关于 Java DateTime 的问题,如下所示:
鉴于纽约比洛杉矶早 3 小时,以下代码将打印什么?
Run Code Online (Sandbox Code Playgroud)LocalDateTime ldt = LocalDateTime.of(2017, 12, 02, 6, 0, 0); ZonedDateTime nyZdt = ldt.atZone(nyZone); ZonedDateTime laZdt = ldt.atZone(laZone); Duration d = Duration.between(nyZdt, laZdt); System.out.println(d);
正确答案是 PT3H 但我有点困惑,这本书是否给出了错误的答案?
鉴于纽约比洛杉矶早 3 小时,这是否意味着,例如,纽约是 5:00,然后洛杉矶将是 2:00。所以Duration.between(5,2)应PT3H因为根据的Javadoc: The result of this method can be a negative period if the end is before the start. To guarantee to obtain a positive duration call abs() on the result.,并且在这种情况下,“2”是前 “5”所以结果应该是PT3H,不PT3H。
你怎么看,哪一个是正确的?
Duration.between返回两个时刻之间的差值。对于LocalDateTime,这意味着正确的答案需要标准化时区。由于洛杉矶当地时间较晚,因此结果为正。
纽约的凌晨 6:00,洛杉矶的凌晨 3:00,这意味着距离洛杉矶的凌晨 6:00 还需要 3 个小时。相反,洛杉矶的上午 6:00,纽约的上午 9:00,这意味着距离纽约上午 6:00 已经过去了 3 个小时。
LocalDateTime ldt = LocalDateTime.of(2017, 12, 02, 6, 0, 0);
ZonedDateTime nyZdt = ldt.atZone(nyZone); // 6:00 AM NY = 3:00 AM LA
ZonedDateTime laZdt = ldt.atZone(laZone); // 6:00 AM LA = 9:00 AM NY
Duration d = Duration.between(nyZdt, laZdt); // 9:00 AM NY - 6:00 AM NY = 3H OR 3:00 AM LA - 6:00 AM LA = 3H
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2566 次 |
| 最近记录: |