我正在使用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日开始。有什么想法吗?
答案 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获得有效的支持合同。)