【发布时间】:2016-08-17 19:28:59
【问题描述】:
我有一个查询正在进行一些时区转换。例如,我想将EST 时间转换为GMT:
对于3/13/2016 @2:00 AM 的 EDT 时间(紧随 EST->EDT 转换之后),我应该得到 GMT 时间 3/13/2016 7:00:00 AM(verified here 日期为 2016 年 3 月 13 日@2am)。相反,我通过使用此查询得到3/13/2016 6:00:00 AM:
SELECT NEW_TIME(TO_DATE('2016/3/13 02:00:00 AM',
'YYYY/MM/DD HH:MI:SS AM'),'EDT','GMT')
FROM DUAL;
对于3/13/2016 @1:00AM 的东部标准时间(转换前一秒),我得到的结果似乎是正确的:
SELECT NEW_TIME(TO_DATE('2016/3/13 01:59:59 AM',
'YYYY/MM/DD HH:MI:SS AM'),'EST','GMT')
FROM DUAL;
结果:
3/13/2016 6:59:59 AM
我在这里做错了什么?我已阅读有关 NEW_TIME 的 Oracle 文档,并尝试使用 GMT 切换 EDT/EST(基于页面底部的一个示例),但这给了我更奇怪的结果。
【问题讨论】:
-
实际上,我看到这里到底发生了什么,我不敢相信我花了这么长时间才弄明白。 2016 年 3 月 13 日凌晨 2:00 在
EPT时间不存在!在这一天,你永远不会在时钟上看到凌晨 2 点!我们只是跳到凌晨 3 点......(我讨厌夏令时!) -
您应该使用完全限定的位置标识符
America/New_York -
这对您来说似乎不是问题,但如果您正在处理时区数据,特别是如果您有来自世界各地时区的数据,而不仅仅是少数美国时区。许多生产数据库都不是最新的,诸如 DST 何时在不同位置开始等问题。
标签: oracle date datetime timezone