Presumibilmente la T e la Z fisse ti confondono un po', in quanto non sono normali modello di formato data e ora elementi. Ma la documentazione dice:
Quindi racchiudi la T e la Z tra virgolette, come "T"
e "Z"
, nel tuo modello di formato.
Se non sei interessato al fuso orario puoi utilizzare il to_timestamp()
funzione
:
to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Oppure se vuoi avere con il fuso orario puoi usare il to_timestamp_tz()
funzione
, che per impostazione predefinita sarà il fuso orario della sessione corrente (poiché in realtà non ne stai specificando uno qui, la Z non viene interpretata come Zulu/UTC):
to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Se lo vuoi con un fuso orario e vuoi specificare che è UTC puoi forzarlo con il from_tz()
funzione
:
from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')), 'UTC')
Per vedere la differenza che producono, specificando un fuso orario per la sessione come demo:
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
Suppongo che la Z sia fissa e che i valori che ottieni rappresentino sempre l'UTC; se effettivamente ottieni fusi orari diversi nei valori che devi convertire, dovrai estrarli e applicarli, il che è fattibile, ma difficile e non vale la pena approfondire a meno che tu non abbia effettivamente quella situazione.