Presumivelmente, os T e Z fixos estão confundindo você um pouco, pois não são normais modelo de formato de data e hora elementos. Mas a documentação diz:
Então você coloca T e Z entre aspas duplas, como
"T"
e "Z"
, em seu modelo de formato. Se você não estiver interessado no fuso horário, poderá usar o
to_timestamp()
função
:to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Ou se você quiser ter com o fuso horário você pode usar o
to_timestamp_tz()
função
, que será padronizado para o fuso horário da sua sessão atual (como você não está realmente especificando um aqui, o Z não é interpretado como Zulu/UTC):to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Se você quiser com um fuso horário e quiser especificar que é UTC, você pode forçar isso com o
from_tz()
função
:from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')), 'UTC')
Para ver a diferença que eles produzem, especificando um fuso horário para a sessão como uma demonstração:
alter session set time_zone = 'America/New_York';
select to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') as no_tz,
to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') as default_tz,
from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"'), 'UTC') as utc_tz
from dual;
NO_TZ
--------------------------------------------------
DEFAULT_TZ
--------------------------------------------------
UTC_TZ
--------------------------------------------------
24-MAR-15 07.08.24.000000000
24-MAR-15 07.08.24.000000000 AMERICA/NEW_YORK
24-MAR-15 07.08.24.000000000 UTC
Estou assumindo que o Z é fixo e os valores que você obtém são, portanto, sempre representam UTC; se você realmente obtiver fusos horários diferentes nos valores que precisa converter, precisará extraí-los e aplicá-los - o que é factível, mas difícil, e não vale a pena entrar, a menos que você realmente tenha essa situação.