2014-01-21 90 views
2

我在四臺機器上測試了以下代碼。其中兩個是windows(win7 & win8),另外兩個是linux(centos)。在Windows PC上的輸出是相同的(但與Linux不同)。來自不同服務器的java.sql.Time生成的不同輸出

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時區。

另一個信息。我也在this online Java compiler上運行過這段代碼,它顯示了輸出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

+1

找到你確定他們是在同一個時區?如果你打印'新日期(d.getTime());'? – assylias

+1

java.sql.Time是java.util.Date的包裝類。你不能直接使用這個類嗎?如果是的話,也可以使用日曆。而且你的問題應該解決。 – Wooff

回答

1

貌似時區的壞轉換

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(); 
+0

但是我現在應該怎麼做?我如何與時間一起使用? –

+0

你將不得不在相同的時區表達你的時間,但我覺得你濫用getTime()方法。你能解釋一下你在做什麼嗎?爲什麼你想在所有機器上具有相同的價值? – Algiz

+0

@Aligz我只需要這個在所有機器上都一樣。它是'JPA'項目的一部分(帶有'time'字段/列的'postgresql' db)。除此之外,我在集羣上使用了四臺機器。 –

相關問題