我在「歐洲/倫敦」時區有一個數據庫服務器,在「歐洲/布魯塞爾」有我的網絡服務器。由於現在是夏令時,我的應用服務器有2小時不同。MySQL數據庫服務器在不同時區的JDBC JDBC日期問題
我創建了一個測試,以重現我的問題:
Query q = JPA.em().createNativeQuery("SELECT UNIX_TIMESTAMP(startDateTime) FROM `Event` WHERE `id` =574");
BigInteger unix = (BigInteger) q.getSingleResult();
System.out.println(unix + "000 UNIX_TIMESTAMP to BigInteger");
Query q2 = JPA.em().createNativeQuery("SELECT startDateTime FROM `Event` WHERE `id` =574");
Timestamp o = (Timestamp) q2.getSingleResult();
System.out.println(o.getTime() + " Timestamp");
的的startDateTime列被定義爲「日期時間」(但同樣的問題與「時間戳」) 我得到的輸出是這樣的:
1340291591000 UNIX_TIMESTAMP to BigInteger
1340284391000 Timestamp
閱讀java日期對象導致時區轉變,我該如何解決這個問題?我期望jdbc驅動程序只需設置它從Date對象中的服務器獲得的「unix time」值。
(一個妥善的解決辦法應該與任何時區組合工作,不僅爲GMT DB)
什麼數據庫數據類型是你的'startDateTime'字段? – Olaf
我認爲UNIX_TIMESTAMP值與System.currentTimeMillis()不一樣,需要在UNIX_TIMESTAMP(毫秒)到Java的毫秒錶示之間進行某種轉換。檢查這個鏈接:http://stackoverflow.com/questions/3188425/java-date-format-conversion –
我知道它是不一樣的,讓我修復這個例子,它不是關於最後的零。 @Olaf startDateTime列被定義爲'datetime'但'timestamp'我有同樣的問題 – Somatik