微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Joda Time无法正确处理夏时制转换

如何解决Joda Time无法正确处理夏时制转换

场景

我有两个 UTC 时间戳为7 days apart

val timestamp1: Long = 1600642800000L // GMT => Sunday,September 20,2020 11:00:00 PM
val timestamp1: Long = 1601247600000L // GMT => Sunday,September 27,2020 11:00:00 PM

此处使用的时区为非洲/卡萨布兰卡

val timeZone = DateTimeZone.forID("Africa/Casablanca")

然后,当我尝试为两个时间戳生成offset时,它显示出奇怪的行为:

timeZone.getoffset(timestamp1) // 3600000 milliseconds OR 1 hour
timeZone.getoffset(timestamp2) // 0 milliseconds

非洲/卡萨布兰卡目前自2020年5月24日起启用Day Light Saving。该时钟在该天向前移动了1个小时。因此,目前是UTC + 1小时。未启用“夏令时”时,它位于UTC + 0

问题

那么,上述行为怎么可能?这两个时间戳记不应该产生相同的1小时偏移吗? 这两个时间戳仅相隔7天,在这两个时间戳之间没有发生任何夏令时事件。

我尝试在其他时区重现类似的行为,但是它们总是为那些时间戳产生相同的偏移量。

对此行为的任何见解都将非常有帮助。

解决方法

当我在使用Java 2.10.6的系统上将 Joda Time 库升级到最新版本openjdk version "11.0.8"时,此问题已解决。之所以起作用,是因为最新版本的Joda Time库具有最新的时区数据以及最近的Day Light Saving规则。我意识到使用最新版本并保持升级很重要,因为“日光节约”规则具有政治意义,并且可以由理事机构更改。

此外,我没有进行任何版本升级,还通过使用native Java Time api编写了相同的代码进行了测试。而且这样做也没有出现此问题。因此,从长远来看,我更喜欢使用Java Time。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?