首页 > 解决方案 > 在 Oracle 中将 UTC 时间戳转换为 AEDT 以考虑夏令时

问题描述

从 UTC 转换为 AEST(澳大利亚东部标准时间)不考虑夏令时,因为它现在是 +11 小时,但这个脚本仍然转换为 10 小时:

Select from_tz (cast(DateField as TIMESTAMP),'UTC') at Time Zone 'Australia/Sydney' as AEST

有没有什么直观的方法可以让它在夏季工作 11 小时,在冬季工作 10 小时,而无需创建函数并对其进行硬编码?

标签: oracletimezone

解决方案


不确定您如何确定您的公式“不考虑夏令时”。它在我的系统上。请注意,date文字假定一天中的时间是午夜。然后比较:

select from_tz (cast(datefield as timestamp),'UTC') 
       at time zone 'Australia/Sydney' as aest
from   ( select date '2020-07-31' as datefield from dual union all
         select date '2020-12-15'              from dual
       )
;
        
AEST                                
------------------------------------
2020-07-31 10:00:00 Australia/Sydney
2020-12-15 11:00:00 Australia/Sydney

显然,Oracle 知道“夏季”和“冬季”时间之间的差异(DST 调整)。


推荐阅读