2009-08-04 112 views
4

我將用Java創建的文件的修改日期設置爲特定的數字。當我在Windows上讀出這個值時,我得到相同的值。但是,在Linux(Ubuntu)上,我獲得了不同的價值。 File.lastModified()的值已關閉9個小時,但是當我查看文件屬性時,我發現它只關閉了1個小時。我期待着全面的價值。Java中的文件修改日期

我錯了,依靠這是兼容和一致的? javadoc在方法的含義上是非常明確的,並沒有提到潛在的不兼容性。

回答

3

這是幾乎可以肯定的時區的問題。 Java方法使用/預計GMT,操作系統將顯示當地時間,這說明了當地時間的差異。現在真正的問題是:如何將時間存儲在文件系統中?

你使用的是什麼文件系統?可能是FAT32 - 它在本地時間存儲時間戳,因此很難在操作系統中保持一致。我不確定究竟哪裏出了問題,但它可能是OS配置問題或JVM錯誤 - 您在Linux上使用哪種JVM?

+0

該文件位於U盤上,因此我不知道該文件系統適用於那裏。但時區的事情是有道理的。 – 2009-08-06 10:10:30

+1

USB棒幾乎總是使用FAT32。 – 2009-08-06 10:52:53

0

你檢查了setLastModified的返回值嗎?

返回:

true if and only if the operation succeeded; false otherwise 
+0

日期明顯不同,所以肯定會發生變化。 – 2009-08-06 10:09:41

0

我的猜測是這是一個時區問題。請注意,javadoc表示「自時代以來的毫秒(00:00:00 GMT,1970年1月1日)」(強調增加)。是否有可能您傳遞給setModified的值是從曆元開始的毫秒數,當地時間?如果是這樣,那麼比利時當地時間GMT + 1就是一小時。這將在屬性對話框中解釋時間。

我不知道如何解釋與lastModified()的9小時差異,除非java或os以某種方式緩存舊值。