Gebaseerd op een eerdere vraag , is het verleidelijk om zowel de T als de Z als letterlijke tekens te behandelen en ze in feite te negeren, met behulp van:
to_timestamp_tz('2014-01-28T12:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
Als u to_timestamp_tz()
. gebruikt zonder een tijdzone op te geven, wordt standaard de tijdzone van uw sessie gebruikt, net als to_timestamp()
; dus een tijd gespecificeerd in Zulu/UTC verliest die zone-informatie:
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
Uw tijd van 12.00 uur wordt weergegeven als 12.00 uur in New York, niet als 12.00 uur UTC.
Een veiligere conversie, ervan uitgaande dat uw waarden altijd UTC moeten vertegenwoordigen, is om de tijdzone expliciet op te geven met de from_tz()
functie
:
WHERE MODIFICATION_DATE >= from_tz(to_timestamp('2014-01-28T12:00:0Z',
'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC')
Dit krijgt de UTC-tijd correct:
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