我有一个要求,其中sysdate显示为19/01/2015 13:22:05
我希望将sysdate转换为CET时间19/01/2015 14:22:05
我想再次将sysdate转换为CEST,它将是19/01/2015 15:22:05
select to_char(sysdate , 'DD/MM/YYYY HH24:MI:SS') actual ,
to_char(utc.get_local_date(sysdate ,'LOCATION') ,'DD/MM/YYYY HH24:MI:SS') cet,
to_char(utc.get_local_date(sysdate ,'LOCATION')+1/24 ,'DD/MM/YYYY HH24:MI:SS') cest
FROM dual
此处的位置正在使用Europe/Amsterdam
时区。
请建议我们无论如何都可以在sql中使用+/24包硬编码+/24来实现CET和CEST时序。
如果我错了,请纠正我。
答案 0 :(得分:0)
我从未听过utc.get_local_date
的任何内容,也许你把它与MySQL混合在一起。
在Oracle上你可以这样做:
SELECT
TO_CHAR(SYSTIMESTAMP , 'DD/MM/YYYY HH24:MI:SS') actual,
TO_CHAR(SYSTIMESTAMP AT TIME ZONE 'CET', 'DD/MM/YYYY HH24:MI:SS') AS cet,
TO_CHAR(SYSTIMESTAMP AT TIME ZONE 'CET' + INTERVAL '1' HOUR, 'DD/MM/YYYY HH24:MI:SS') AS cest
FROM dual;
问题是CET
未涵盖任何夏令时。为了自动覆盖DST,您必须使用长时区名称,例如
SELECT
TO_CHAR(SYSTIMESTAMP AT TIME ZONE 'Europe/Berlin', 'DD/MM/YYYY HH24:MI:SS') AS cet
FROM dual;
答案 1 :(得分:0)
Oracle没有为时间戳提供“AT SUMMER TIME”之类的任何功能。
您可以使用固定时区,例如CET
或+01:00
或+02:00
,也可以使用时区区域,例如Europe/Amsterdam
。
使用时区区域时,会自动处理夏令时设置,即输出取决于输入日。
说“1月1日显示为夏令时”有点棘手
例如SELECT TZ_OFFSET('Europe/Amsterdam') FROM dual;
将始终返回+01:00
,无论您是在夏季还是冬季运行此查询。