Presumiblemente, las T y Z fijas lo confunden un poco, ya que no son normales modelo de formato de fecha y hora elementos. Pero la documentación dice:
Así que encierra la T y la Z entre comillas dobles, como "T"
y "Z"
, en su modelo de formato.
Si no está interesado en la zona horaria, puede usar la to_timestamp()
función
:
to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
O si quieres tener con la zona horaria puedes usar la to_timestamp_tz()
función
, que por defecto será la zona horaria de su sesión actual (ya que en realidad no está especificando una aquí, la Z no se interpreta como Zulu/UTC):
to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Si lo desea con una zona horaria y desea especificar que es UTC, puede forzarlo con el from_tz()
función
:
from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')), 'UTC')
Para ver la diferencia que producen, especificando una zona horaria para la sesión como demostración:
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
Supongo que la Z es fija y, por lo tanto, los valores que obtiene siempre representan UTC; si realmente obtiene diferentes zonas horarias en los valores que necesita convertir, entonces deberá extraerlos y aplicarlos, lo cual es factible, pero difícil, y no vale la pena entrar a menos que realmente tenga esa situación.