4

我将用 Java 创建的文件的修改日期设置为特定数字。当我在 Windows 上读出该值时,我得到了相同的值。但是,在 Linux (ubuntu) 上,我得到了不同的值。File.lastModified() 的值关闭了 9 小时,但是当我查看文件属性时,我发现它仅关闭了 1 小时。我期待全面相同的价值。

我依赖于兼容和一致是错误的吗?javadoc对方法的含义非常明确,并且没有提到潜在的不兼容性。

4

3 回答 3

3

这几乎可以肯定是时区问题。Java 方法使用/期望格林威治标准时间,操作系统将显示本地时间,这解释了那里的差异。现在真正的问题是:时间是如何存储在文件系统中的?

您使用的是什么文件系统?可能是 FAT32 - 它以本地时间存储时间戳,因此很难在操作系统之间保持一致。我不确定到底哪里出了问题,但这可能是操作系统配置问题或 JVM 错误——您在 Linux 上使用的是哪个 JVM?

于 2009-08-04T14:09:40.633 回答
0

你检查了返回值setLastModified吗?

回报:

true if and only if the operation succeeded; false otherwise
于 2009-08-04T13:43:46.833 回答
0

我的猜测是这是一个时区问题。请注意,javadoc 说“自纪元以来的毫秒数(格林威治标准时间 00:00:00,19701 月 1 日)”(强调添加)。您传递给 setModified 的值是否可能是自纪元当地时间以来的毫秒数?如果是这样,那么您将需要一个小时,因为比利时的当地时间是 GMT + 1。这将解释属性对话框中的时间。

我无法解释与 lastModified() 的 9 小时差异,除非 java 或操作系统以某种方式缓存旧值。

于 2009-08-04T14:11:41.677 回答