2012-12-31 112 views
0
Date now = new Date(); 
long timeInterval = now.getTime() - (15705 * 24 * 60 * 60 * 1000L); 
long hours = timeInterval/(60 * 60 * 1000L); 
LOG.debug(String.format("current date:%s, timeInterval:%d,hours:%d",now.toString(),timeInterval, hours)); 

的結果是系統打印是意外的輸出(15705指天的20世紀70年代以來的號碼):與ISO時間(8601)

31年12月12日22時06分47秒DEBUG統計。 TimeTest:當前日期:週一12月31日22時06分47秒 CST 2012,一個時間間隔:50807153,時間:14

你可以看到當前的時間是21小時,但結果顯示爲14小時。

+0

幾乎可以肯定是一個時區問題。 – Andrew

+0

「Date」類的許多方法都不推薦使用,因此請使用「Calendar」或「GregorianCalendar」。你不會有這個問題,因爲它們是基於語言環境的。 –

回答

2

now.getTime()會得到你在UTC millis的值 - 那是GMT + 0。 你可能表明日誌打印使用系統時區,它是22點06分47秒,可能隨時隨地wasnt英格蘭近:-)

也,請使用Calendar類日期arithmatic,因爲它不像你的代碼,會考慮諸如閏年,閏秒和時區變化之類的事情(我們不會在UTC發生,可能會在其他任何區域發生)

+0

感謝您的幫助,這確實是時區問題,而我在中國,時區差異大約8小時。 – piaolingxue

4

Mon Dec 31 22:06:47 CST 2012是以GMT時間爲Mon Dec 31 14:06:47 2012,這是用於時期開始的時區。

換句話說,now.getTime()返回自1970年1月1日00:00:00 GMT以來的毫秒數,並且您使用不同的時區。

+0

非常感謝,確實是時區問題。 – piaolingxue