时区和夏令时
DATE 数据类型不处理时区或夏令时变化。
或者:
- 使用 TIMESTAMP WITH TIME ZONE数据类型 ; 要么
- 处理应用程序逻辑中的更改。
DATE 可以存储为协调世界时(UTC)并转换为当前会话时区,如下所示:
SELECT FROM_TZ(
         CAST(
           TO_DATE( '2016-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS' )
           AS TIMESTAMP
         ),
         'UTC'
       )
       AT LOCAL AS time
FROM   DUAL;
如果你运行 ALTER SESSION SET TIME_ZONE = '+01:00';,那么输出是:
TIME2016-01-01 13:00:00.000000000 +01:00
和 ALTER SESSION SET TIME_ZONE = 'PST'; 然后输出是:
TIME2016-01-01 04:00:00.000000000 PST