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