在检查时间戳转换时,我在DST范围内或之外的不同时区转换时遇到了障碍。
知道甲骨文从3月底到10月底的范围?
这些结果是否正确?
SELECT DBTIMEZONE FROM dual;
+02:00
SELECT
TO_CHAR(CAST(TO_TIMESTAMP_TZ('2018-02-25T22:22:22+01:00','YYYY-MM-DD"T"HH24:MI:SS TZR') as timestamp with local time zone)),
TO_CHAR(CAST(TO_TIMESTAMP_TZ('2020-04-28T20:20:20+01:00','YYYY-MM-DD"T"HH24:MI:SS TZR') as timestamp with local time zone))
FROM DUAL;
OUTSIDE_DST INSIDE_DST
25.02.18 22:22:22,000000 28.04.20 21:20:20,000000
答案 0 :(得分:0)
数据类型p
表示时间始终,仅在当前用户会话时区显示,即TIMESTAMP WITH LOCAL TIME ZONE
您的陈述
SESSIONTIMEZONE
实际上等于
SELECT
CAST(TO_TIMESTAMP_TZ('2018-02-25T22:22:22+01:00','YYYY-MM-DD"T"HH24:MI:SS TZR') as timestamp with local time zone),
CAST(TO_TIMESTAMP_TZ('2020-04-28T20:20:20+01:00','YYYY-MM-DD"T"HH24:MI:SS TZR') as timestamp with local time zone)
FROM DUAL;
在当前用户会话时区返回值,没有任何问题。无论DST是否处于活动状态,SELECT
TIMESTAMP '2018-02-25 22:22:20+01:00' AT TIME ZONE SESSIONTIMEZONE,
TIMESTAMP '2020-04-28 20:20:20+01:00' AT TIME ZONE SESSIONTIMEZONE
FROM DUAL;
表示UTC总是提前1小时。
您的+01:00
很可能是区域名称,例如"洲/城市"。尝试将会话时区设置为
SESSIONTIMEZONE
然后结果将全部在ALTER SESSION SET TIME_ZONE = '+02:00';
您可以使用+02:00
查询夏令时,例如:
TZD
第一次没有夏令时(即冬令时),第二次没有夏令时(即夏令时)