错误的 EST 时区而不是 Oracle 中的 EDT

1 oracle timezone

我在 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
Run Code Online (Sandbox Code Playgroud)

Bal*_*app 6

我没有进一步调查特定的数据库和时区文件版本,但我猜你使用旧的数据库版本和过时的时区文件。

10.2.0.5.0:

SQL> select VERSION from v$timezone_file;

   VERSION
----------
         4

SQL> SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2020-08-01 00:00:00', 'America/New_York'),'TZD') AS TIMEZONE FROM DUAL ;

TIM
---
EDT

SQL> SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2021-08-01 00:00:00', 'America/New_York'),'TZD') AS TIMEZONE FROM DUAL ;

TIM
---
EST
Run Code Online (Sandbox Code Playgroud)

11.2.0.4.180417:

SQL> select VERSION from v$timezone_file;

   VERSION
----------
        14

SQL> SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2020-08-01 00:00:00', 'America/New_York'),'TZD') AS TIMEZONE FROM DUAL ;

TIM
---
EDT

SQL> SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2021-08-01 00:00:00', 'America/New_York'),'TZD') AS TIMEZONE FROM DUAL ;

TIM
---
EDT
Run Code Online (Sandbox Code Playgroud)

是时候升级了。

这是一个很好的起点(需要有效的 Oracle 支持合同,无论如何您都需要下载补丁):更新了 Oracle RDBMS 和 OJVM 时区文件补丁中的 DST 转换和新时区(文档 ID 412160.1)