पहले के एक प्रश्न पर आधारित , यह T और Z दोनों को वर्ण शाब्दिक के रूप में व्यवहार करने के लिए आकर्षक है, और मूल रूप से उनका उपयोग करके उन्हें अनदेखा करें:
to_timestamp_tz('2014-01-28T12:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
अगर आप to_timestamp_tz()
. का इस्तेमाल करते हैं एक समय क्षेत्र निर्दिष्ट किए बिना यह आपके सत्र समय क्षेत्र के लिए डिफ़ॉल्ट है, जैसा कि to_timestamp()
होगा; इसलिए ज़ुलु/यूटीसी में निर्दिष्ट समय उस क्षेत्र की जानकारी खो देता है:
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
आपका 12:00 समय न्यूयॉर्क में 12:00 के रूप में दिखाया गया है, न कि 12:00 UTC के रूप में।
एक सुरक्षित रूपांतरण, यह मानते हुए कि आपके मान हमेशा यूटीसी का प्रतिनिधित्व करते हैं, समय क्षेत्र को स्पष्ट रूप से निर्दिष्ट करना है from_tz()
समारोह
:
WHERE MODIFICATION_DATE >= from_tz(to_timestamp('2014-01-28T12:00:0Z',
'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC')
इससे UTC समय ठीक से प्राप्त होता है:
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