2009-08-04 81 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以某种方式缓存旧值。