Dựa trên câu hỏi trước đó , thật hấp dẫn để coi cả T và Z là các ký tự ký tự và về cơ bản bỏ qua chúng, bằng cách sử dụng:
to_timestamp_tz('2014-01-28T12:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
Nếu bạn sử dụng to_timestamp_tz()
mà không chỉ định múi giờ thì múi giờ đó sẽ mặc định thành múi giờ phiên của bạn, như to_timestamp()
; do đó, một thời gian được chỉ định trong Zulu / UTC sẽ làm mất thông tin vùng đó:
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
Giờ 12:00 của bạn được hiển thị là 12:00 ở New York, không phải 12:00 UTC.
Một chuyển đổi an toàn hơn, giả sử các giá trị của bạn luôn được cho là đại diện cho UTC, là chỉ định múi giờ một cách rõ ràng với the from_tz()
chức năng
:
WHERE MODIFICATION_DATE >= from_tz(to_timestamp('2014-01-28T12:00:0Z',
'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC')
Điều này tính đúng giờ 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