Berdasarkan pertanyaan sebelumnya , Anda tergoda untuk memperlakukan T dan Z sebagai literal karakter, dan pada dasarnya mengabaikannya, menggunakan:
to_timestamp_tz('2014-01-28T12:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
Jika Anda menggunakan to_timestamp_tz()
tanpa menentukan zona waktu maka default ke zona waktu sesi Anda, seperti halnya to_timestamp()
; jadi waktu yang ditentukan dalam Zulu/UTC kehilangan informasi zona tersebut:
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
Waktu 12:00 Anda ditampilkan sebagai 12:00 di New York, bukan 12:00 UTC.
Konversi yang lebih aman, dengan asumsi nilai Anda selalu dianggap mewakili UTC, adalah menentukan zona waktu secara eksplisit dengan from_tz()
fungsi
:
WHERE MODIFICATION_DATE >= from_tz(to_timestamp('2014-01-28T12:00:0Z',
'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC')
Ini mendapatkan waktu UTC dengan benar:
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