正如AntDC建議的那樣,您可以使用the SYS_EXTRACT_UTC()
function。這將「時區與日期時間」從任何時區轉換爲UTC。
SYSDATE沒有時區。如果你通過它,那麼它會隱式轉換到系統時區,所以它可以工作,但是可以使用SYSTIMESTAMP,因爲它已經是區域感知的。
您在評論中說過要使用日期,但所有Oracle日期都有時間組件;你可以用(這是有道理的,你做的比較)與TRUNC()
設置爲午夜時得到的結果爲日期類型:
select systimestamp,
sys_extract_utc(systimestamp) as utctime,
trunc(sys_extract_utc(systimestamp)) as utcdate
from dual;
SYSTIMESTAMP UTCTIME UTCDATE
-------------------------------- ------------------------- -------------------
2016-04-08 17:18:27.352 +01:00 2016-04-08 16:18:27.352 2016-04-08 00:00:00
這是在英國的服務器上運行,所以當地時間是BST。
由於不涉及每日變化,其效果可以使用會話的時間,而不是服務器的時間證明:
alter session set time_zone = '+12:00';
select current_timestamp,
sys_extract_utc(current_timestamp) as utctime,
trunc(sys_extract_utc(current_timestamp)) as utcdate
from dual;
CURRENT_TIMESTAMP UTCTIME UTCDATE
-------------------------------- ------------------------- -------------------
2016-04-09 04:23:17.910 +12:00 2016-04-08 16:23:17.910 2016-04-08 00:00:00
我的會議時間是2016年4月9日,但仍發現UTC日期爲2016-04-08。
(要清楚,我不建議切換到使用current_timestamp
或current_date
;我使用的systimestamp
和sysdate
純粹作爲演示者,而不是)。
您的編輯預期了我的問題並回答了它。謝謝!這很清楚。我相信這實現了我正在尋找的東西。 – CheeseFry