Преобразование в символ с потерей перехода на летнее время

#oracle #timestamp-with-timezone

#Oracle #временная метка с часовым поясом

Вопрос:

У меня следующий запрос:

 SELECT
    from_tz(CAST(e.Event_Time_UTC AS TIMESTAMP), 'UTC') AS UTC,
    from_tz(CAST(e.Event_Time_UTC AS TIMESTAMP), 'UTC') AT TIME ZONE 'Brazil/East' AS BRT,
    TO_CHAR(from_tz(CAST(e.Event_Time_UTC AS TIMESTAMP), 'UTC') AT TIME ZONE 'Brazil/East', 'HH24:MI') AS Hora
FROM 
    MY_EVENTS e
ORDER BY 
    UTC
  

Я получаю время UTC и конвертирую в местное.

Все работает нормально, когда я конвертирую напрямую, но когда я использую TO_CHAR, я теряю переход на летнее время и в итоге результат выглядит следующим образом:

query_result

Может кто-нибудь, пожалуйста, объяснить, что происходит, пожалуйста?

РЕДАКТИРОВАТЬ: Вот результат от v$timezone_file :

v$timezone_file

Комментарии:

1. Я не вижу такого поведения в моей копии Oracle. with e (event_time_utc) as ( select to_timestamp('17/10/16 13:30:00', 'dd/mm/yy hh24:mi:ss') from dual ) SELECT..... FROM e выдает тот же результат, 11:30, в последних двух столбцах.

2. Как вы думаете, это может иметь какое-то отношение к версии? Мой — 10.2.0.4.0

3. Я был бы удивлен …. не уверен. У to_char() нет причин менять время (то есть я не могу придумать никакой причины).

4. Единственное, что я вижу, это то, что он не переходит на летнее время.

5. Я возился и увидел, что ИЗВЛЕЧЕНИЕ (ЧАС ИЗ BRT) дает тот же результат, что и ‘HORA’