2016-09-26 123 views
1

我有以下表日期時間錯誤

CREATE TABLE mydate(id serial primary key, date timestamp); 

數據庫被配置爲在UTC時區:

SHOW TIMEZONE; 

TimeZone 
---------- 
UTC 
(1 row) 

我插入了測試日期表和當我從表中選擇它時,我看到以下結果(看起來是正確的):

db=# SELECT date FROM mydate; 
     date   
--------------------- 
2015-11-01 00:00:00 

現在,當我在Clojure中運行相同的查詢,我得到以下結果:

(q "SELECT date FROM mydate") 
=> [[#inst "2015-10-31T22:00:00.000000000-00:00"]] 

結果是一個java.sql.Timestamp對象看起來要於2小時後。如果我將該對象轉換爲JodaTime並詢問當前小時,我得到22(我應該得到0)。

不過,如果我使用toString()方法轉換java.sql.Timestamp對象的字符串,我得到以下結果:

「2015年11月1日00:00:00.0」

爲什麼java.sql.Timestamp對象落後了2個小時,爲什麼在將它轉換爲字符串時它看起來是正確的?

+1

我相信'timestamptz'通常被推薦來代替'timestamp'。你看過這個選項嗎? –

回答

3

我通常會建議您在UTC時間運行您的應用程序,並且只在視圖層中負責在正確的時區顯示時間。嘗試將JVM標誌user.timezone設置爲UTC(如java -Duser.timezone=UTC ...和/或您的project.clj:jvm-opts ["-Duser.timezone=UTC"])。