[英]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.