2016-07-08 66 views
0

在我的代碼中,當我在東部時區保存一個日期爲今天的日期時,它會在我們查看它時正確顯示。但在太平洋時區,它顯示的是以前的日期,即昨天的日期。我們在Oracle中將日期存儲爲日期字段。上一個日期獲取在太平洋時區在oracle中

太平洋時間需要特殊編碼以符合核心日期嗎?

+0

選擇TO_DATE(TO_CHAR(SYSTIMESTAMP在時間區 '6:00',「DD.MM.YYYY HH24:MI:SS '),'dd.mm.yyyy hh24:mi:ss')從雙? –

+0

我在數據庫中有start_date字段。我將如何使用上面的方法檢索它? – user3151468

+0

您在日期字段「日期」類型中插入帶時區的時間戳嗎?如果是,那麼你需要在插入之前更改時區,如下所示:insert into some_table(start_date)values(systimestamp at'6:00'); - 因爲轉換 –

回答

0

日期沒有時區 - 所以當你存儲來自不同時區的日期時,你需要確保你將它們轉換爲同一時區。

CREATE TABLE table_name(id INT, value DATE); 

INSERT INTO table_name VALUES(1, TIMESTAMP '2016-07-07 23:00:00 PST' AT TIME ZONE 'UTC'); 
INSERT INTO table_name VALUES(1, TIMESTAMP '2016-07-07 23:00:00 EST' AT TIME ZONE 'UTC'); 

然後:

SELECT id, 
     value AS utc, 
     CAST(
     FROM_TZ(CAST(value AS TIMESTAMP), 'UTC') AT TIME ZONE 'EST' 
     AS DATE 
     ) AS EST, 
     CAST(
     FROM_TZ(CAST(value AS TIMESTAMP), 'UTC') AT TIME ZONE 'PST' 
     AS DATE 
     ) AS PST 
FROM table_name t; 

輸出:

ID UTC     EST     PST 
-- ------------------- ------------------- ------------------- 
1 2016-07-08 06:00:00 2016-07-08 01:00:00 2016-07-07 23:00:00 
2 2016-07-08 04:00:00 2016-07-07 23:00:00 2016-07-07 21:00:00 
相關問題