簡體   English   中英

java.sql.Time從不同服務器生成的不同輸出

[英]Different output generated by java.sql.Time from different server

我已經在四台機器上測試了以下代碼。 其中兩個是Windows(win7和win8),兩個是linux(centos)。 Windows pc上的輸出相同(但與Linux不同)。

java.sql.Time d = java.sql.Time.valueOf("19:54:17");
System.out.println(d.getTime());

Windows輸出: 50057000
Linux輸出: 93257000

Windows: java version "1.6.0_26"
Linux: java version "1.6.0_24"

機器之間的時間略有不同(2-3分鍾)。 但是Windows具有UTC+6 ,Linux具有GMT+6時區。

另一個信息。 我也在此在線Java編譯器上運行了此代碼,它顯示了輸出93257000

我只希望所有機器的輸出相等。 我該怎么辦?

更新:當您請求輸出此代碼System.out.println(new Date(d.getTime()))

Windows: Thu Jan 01 19:54:17 ALMT 1970
Linux: Thu Jan 01 19:54:17 GMT-06:00 1970
在線編譯器: Thu Jan 01 19:54:17 CST 1970

似乎時區轉換錯誤

50057000 = 13:54:17 = 19:56:17 - 6
93257000 = 25:54:17 = 19:56:17 + 6

並不是真正的解決方案,但是格式在注釋中看起來不太好。

我認為您正在valueOf方法中丟失時區信息。 d.getTime().toString()將根據語言環境轉換時間。 檢查您在Java中是否具有相同的時區:

Calendar.getInstance().getTimeZone();
java.sql.Time.valueOf("19:54:17").getTimezoneOffset();

我通過將以下一項與我的一項結合使用找到了解決方案。 這使我在整台機器上的長期價值不變。

TimeZone.setDefault(TimeZone.getTimeZone("PST"));

有關此問題的更多詳細信息,請參見http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4487450

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM