我将用Java创建的文件的修改日期设置为特定的数字。当我在Windows上读出这个值时,我得到相同的值。但是,在Linux(Ubuntu)上,我获得了不同的价值。 File.lastModified()的值已关闭9个小时,但是当我查看文件属性时,我发现它只关闭了1个小时。我期待着全面的价值。Java中的文件修改日期
我错了,依靠这是兼容和一致的? javadoc在方法的含义上是非常明确的,并没有提到潜在的不兼容性。
我将用Java创建的文件的修改日期设置为特定的数字。当我在Windows上读出这个值时,我得到相同的值。但是,在Linux(Ubuntu)上,我获得了不同的价值。 File.lastModified()的值已关闭9个小时,但是当我查看文件属性时,我发现它只关闭了1个小时。我期待着全面的价值。Java中的文件修改日期
我错了,依靠这是兼容和一致的? javadoc在方法的含义上是非常明确的,并没有提到潜在的不兼容性。
这是几乎可以肯定的时区的问题。 Java方法使用/预计GMT,操作系统将显示当地时间,这说明了当地时间的差异。现在真正的问题是:如何将时间存储在文件系统中?
你使用的是什么文件系统?可能是FAT32 - 它在本地时间存储时间戳,因此很难在操作系统中保持一致。我不确定究竟哪里出了问题,但它可能是OS配置问题或JVM错误 - 您在Linux上使用哪种JVM?
你检查了setLastModified
的返回值吗?
返回:
true if and only if the operation succeeded; false otherwise
日期明显不同,所以肯定会发生变化。 – 2009-08-06 10:09:41
我的猜测是这是一个时区问题。请注意,javadoc表示“自时代以来的毫秒(00:00:00 GMT,1970年1月1日)”(强调增加)。是否有可能您传递给setModified的值是从历元开始的毫秒数,当地时间?如果是这样,那么比利时当地时间GMT + 1就是一小时。这将在属性对话框中解释时间。
我不知道如何解释与lastModified()的9小时差异,除非java或os以某种方式缓存旧值。
该文件位于U盘上,因此我不知道该文件系统适用于那里。但时区的事情是有道理的。 – 2009-08-06 10:10:30
USB棒几乎总是使用FAT32。 – 2009-08-06 10:52:53