我在 Oracle 数据库中没有得到正确的时区。该问题仅从 2021 年开始发生。请查看两个相同的查询 - 第一个是 2020 年,第二个是 2021 年。第一个正确地将时区指定为 EDT;第二个错误地给出了 EST。如何解决这个问题?
SELECT
TO_CHAR(FROM_TZ(TIMESTAMP '2020-08-01 00:00:00', 'America/New_York'),'TZD') AS TIMEZONE
FROM DUAL ;
---
EDT
SELECT
TO_CHAR(FROM_TZ(TIMESTAMP '2021-08-01 00:00:00', 'America/New_York'),'TZD') AS TIMEZONE
FROM DUAL ;
---
EST
我没有进一步调查特定的数据库和时区文件版本,但我猜你使用的是旧数据库版本和过时的时区文件。
10.2.0.5.0:
11.2.0.4.180417:
是时候升级了。
这是一个很好的起点(需要一份有效的 Oracle 支持合同,您无论如何也需要它来下载补丁):Oracle RDBMS 和 OJVM 时区文件补丁中更新的 DST 转换和新时区(文档 ID 412160.1)