Преобразование из UTC в AEST (восточное стандартное время Австралии) не учитывает переход на летнее время, так как сейчас +11 часов, но этот скрипт по-прежнему конвертирует с 10 часами:
Select from_tz (cast(DateField as TIMESTAMP),'UTC') at Time Zone 'Australia/Sydney' as AEST
Есть ли какой-нибудь интуитивно понятный способ сделать это 11 часов летом и 10 часов зимой без необходимости создавать функцию и жестко кодировать ее?
Не уверен, как вы определили, что ваша формула «не учитывает летнее время». Это работает в моей системе. Обратите внимание, что литерал 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 знает о разнице между «летним» и «зимним» временем (настройка летнего времени).