Förmodligen förvirrar de fasta T och Z dig lite, eftersom de inte är normala formatmodell för datum och tid element. Men dokumentationen säger:
Så du omger T och Z med dubbla citattecken, som "T"
och "Z"
, i din formatmodell.
Om du inte är intresserad av tidszonen kan du använda den to_timestamp()
funktion
:
to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Eller om du vill ha med tidszonen kan du använda den to_timestamp_tz()
funktion
, som som standard kommer att vara din nuvarande sessionstidszon (eftersom du faktiskt inte anger någon här, tolkas Z inte som Zulu/UTC):
to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Om du vill ha det med en tidszon och vill ange att det är UTC kan du tvinga fram det med den from_tz()
funktion
:
from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')), 'UTC')
För att se skillnaden som de producerar, ange en tidszon för sessionen som en 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
Jag antar att Z är fast och att värdena du får representerar därför alltid UTC; om du faktiskt får olika tidszoner i de värden du behöver konvertera så måste du extrahera och tillämpa dem - vilket är genomförbart, men svårt och inte värt att gå in på om du inte faktiskt har den situationen.