我想计算不同时区的日期之间的时差 . 我将这两次转换为格林威治时间 . 但是当我在 Europe/Moscow
时区转换日期时,偏移量是不同的,尽管没有夏令时 .
这是我检查的情况:
SELECT TO_DATE('5/20/2018 10:05:00 PM','mm/dd/yyyy hh:mi:ss am'),
TO_DATE('5/20/2018 10:05:00 PM','mm/dd/yyyy hh:mi:ss am')
- extract(TIMEZONE_HOUR from from_tz (TO_TIMESTAMP('5/20/2018 10:05:00 PM','mm/dd/yyyy hh:mi:ss am') ,'GMT' ) at time zone 'Europe/Moscow')/24 deptime_GRINICH
from dual
UNION
SELECT TO_DATE('5/24/2018 11:35:00 PM','mm/dd/yyyy hh:mi:ss am'),
TO_DATE('5/24/2018 11:35:00 PM','mm/dd/yyyy hh:mi:ss am')
- extract(TIMEZONE_HOUR from from_tz (TO_TIMESTAMP('5/24/2018 11:35:00 PM','mm/dd/yyyy hh:mi:ss am') ,'GMT' ) at time zone 'Europe/Moscow')/24 deptime_GRINICH
from dual
结果是:
Date date converting to Greenwich time zone
5/20/2018 10:05:00 PM 5/20/2018 6:05:00 PM --> hour difference 4 hours
5/24/2018 7:35:00 PM 5/24/2018 3:35:00 PM --> hour difference 4 hours
但2018年时区 - 索契是UTC 3小时
1 回答
2014年10月,俄罗斯改变了日光节约的规则 . Oracle数据库中的时区文件可能是旧文件,但不包含最近的更改 . 验证版本
并考虑升级,请参阅Upgrading the Time Zone File and Timestamp with Time Zone Data
但是,它似乎是Oracle中的一个错误 . 看看我的查询比你的例子更清晰:
这真的很奇怪,因为
TZH:TZM
,resp .EXTRACT(TIMEZONE_HOUR FROM ...)
返回的值与默认值NLS_TIMESTAMP_TZ_FORMAT = ... TZH:TZM
不同 . 对于其他时区(例如Europe/Zurich
),我总是02:00
- 正如预期的那样 .您可以在Oracle支持中打开一张票 .
我有两个数据库,一个是旧的,一个是新的 . 旧的并没有反映俄罗斯夏令时的最近变化,而新的变化则是如此 . 但是,上述错误同时出现在: