无法将时间戳转换为亚洲/耶路撒冷时区

时间:2017-07-21 10:16:52

标签: sql oracle timezone timestamp

我正在使用Oracle,它正在做:

 SELECT FROM_TZ(TIMESTAMP '2017-03-31 02:10:00', 'Asia/Jerusalem') 
   FROM DUAL;

抛出:

01878. 00000 -  "specified field not found in datetime or interval"

但我不知道为什么。那天没有时间变化,DST时间从2017年3月24日开始。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的Oracle数据库似乎认为2017年以色列春季DST过渡时间是3月31日而不是3月24日。如果时区数据文件尚未更新,则会发生这种情况。

Asia/Jerusalem区域最后一次在tzdb版本2012h中修改,当相关规则从this commit中的Fri>=26更改为Fri>=23时。因此,您的数据库包含的数据来自tzdb发行版 old 而不是2012h。 2012h announcement引用了此更改。

Oracle数据库有自己的时区文件版本和版本控制方案,所以我不确定这与哪个Oracle tz数据文件版本有关。但是,您应该始终将时区数据更新为最新版本。订阅tz announcements mailing list at IANA,然后在每次tzdb发布后立即查找Oracle的相应更新。

有关在Oracle中更新时区数据的信息,请查看in the documentation here

(我的理解是Oracle时区数据文件本身只能通过Oracle获得有效的支持合同。)