【发布时间】:2018-10-16 06:47:37
【问题描述】:
假设我正在使用 Oracle SGBD (RDBMS) 和 Java 8。
我的历史日期时间存储在 UTC 时区,但我的应用程序仅显示本地日期时间,而且我的统计计算也仅适用于本地日期时间。
现在,假设欧洲的 DST 规则发生了变化,as is planned。
让我的应用和统计信息保持正常运行的最简单方法是什么?
到目前为止,我所读到的是 Oracle 和 Java 中都有与 DST 规则相关的时区,但它们不会自动更新。此外,我想做的是在更改之前和之后保留规则,而不仅仅是更新规则,因为我需要历史统计数据,所以我需要“更改之前的欧洲/巴黎”时区和“之后的欧洲/巴黎”更改”时区,或者更好的时区与根据需要应用自身的规则历史相关联。
即使在 Java 中有一些方便的方法可以做到这一点,它仍然应该在 Oracle 中修复以涵盖所有用例。
这是芝加哥相关的历史性规则变化之一。 DST 结束于 9 月的最后一个星期日到 1954 年,然后是 1955 年的 10 月的最后一个星期日(直到下一次规则更改):
DST 开始(时钟向前)-> DST 结束(时钟向后)
1953 年 dimanche 26 月 26 日,02 时 00 -> dimanche 9 月 27 日,02 时 00
1954 年 25 月 25 日,02 时 00 -> 迪曼奇 9 月 26 日,02 时 00
1955 年 24 月 24 日,02 时 00 -> 迪曼奇 10 月 30 日,02 时 00
1956 年 dimanche 4 月 29 日,02 时 00 -> dimanche 10 月 28 日,02 时 00
附: : 我知道IANA historical timezone database,但是如果您已经这样做了,请展示如何将它实际用于 Oracle SGBD 和 Java。
附言: 也欢迎任何关于在未来数据库中比“UTC”更好地处理这个问题的建议。
【问题讨论】:
-
感谢一位欧盟公民的好消息!
-
好吧,我还不确定“好”消息是什么...... :)
-
我只知道 Java。新规则正式生效后,Olson/IANA 数据库将更新。之后,新的 Java 版本将具有新规则,但仍将包含历史更改。这对你来说还不够吗?如果您当时不想升级您的 Java,我预计将发布一个新版本的 Java Timezone Updater Tool,以便您可以更新现有的 Java 安装并获得相同的版本。
-
你将如何参考最新或旧时区?我只知道我所在时区的“欧洲/巴黎”。你应该为 java 做一个答案,并创建一个芝加哥的例子,他已经改变了多个规则。
-
与俄罗斯或智利的突然变化相比,至少有更长的准备时间以防发生变化