时区和夏令时
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