我有一个查询正在做一些时区转换。举个例子,我想从一个EST
时间转换为GMT
:Oracle - 如何正确*从EST/EDT转换为GMT?
对于EDT时间3/13/2016 @2:00 AM
(紧接EST-以下> EDT转换)我应该得到的3/13/2016 7:00:00 AM
(verified here一个GMT时间为3日/ 13/2016 @ 2am)。
SELECT NEW_TIME(TO_DATE('2016/3/13 02:00:00 AM',
'YYYY/MM/DD HH:MI:SS AM'),'EDT','GMT')
FROM DUAL;
对于EST时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:00:00 AM
:
3/13/2016 6:59:59 AM
我在做什么错在这里?我已阅读了关于NEW_TIME的Oracle文档,并试图用GMT(基于它们在页面底部的一个示例)切换EDT/EST,但这给我带来了更多奇怪的结果。
实际上,我看到这里到底发生了什么,我不敢相信这花了我很长时间才弄明白。凌晨2:00在3/13/2016不存在'EPT'时间!在这一天你永远不会看到凌晨2点!我们只是跳到凌晨3点...(男人我讨厌夏令时!) –
你应该使用完全合格的位置标识符'America/New_York' –
这似乎并不是你这里的问题,但要确保如果您使用的是时区数据,尤其是如果您的数据来自世界各地的时区,而不仅仅是美国的少数几个时区,那么您最新的数据库时区修补程序是最新的。很多生产数据库都没有及时提供有关DST从不同位置开始的所有问题。 –