Baseret på et tidligere spørgsmål , er det fristende at behandle både T og Z som bogstavelige tegn og dybest set ignorere dem ved at bruge:
to_timestamp_tz('2014-01-28T12:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
Hvis du bruger to_timestamp_tz()
uden at angive en tidszone, vil den som standard være din sessions tidszone, ligesom to_timestamp()
; så et tidspunkt angivet i Zulu/UTC mister denne zoneinformation:
alter session set time_zone = 'America/New_York';
select to_timestamp_tz('2014-01-28T12:00:0Z',
'YYYY-MM-DD"T"HH24:MI:SS"Z"') from dual;
TO_TIMESTAMP_TZ('2014-01-28T12:00:0Z','YYYY-MM-DD"T"HH24:MI:SS"Z"')
-------------------------------------------------------------------
28-JAN-14 12.00.00.000000000 AMERICA/NEW_YORK
Din 12:00-tid vises som 12:00 i New York, ikke 12:00 UTC.
En mere sikker konvertering, forudsat at dine værdier altid skal repræsentere UTC, er at specificere tidszonen eksplicit med den from_tz()
funktion
:
WHERE MODIFICATION_DATE >= from_tz(to_timestamp('2014-01-28T12:00:0Z',
'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC')
Dette får UTC-tiden korrekt:
alter session set time_zone = 'America/New_York';
select from_tz(to_timestamp('2014-01-28T12:00:0Z',
'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC') from dual;
FROM_TZ(TO_TIMESTAMP('2014-01-28T12:00:0Z','YYYY-MM-DD"T"HH24:MI:SS"Z"'),'UTC')
-------------------------------------------------------------------------------
28-JAN-14 12.00.00.000000000 UTC