我将用 Java 创建的文件的修改日期设置为特定数字。当我在 Windows 上读出该值时,我得到了相同的值。但是,在 Linux (ubuntu) 上,我得到了不同的值。File.lastModified() 的值关闭了 9 小时,但是当我查看文件属性时,我发现它仅关闭了 1 小时。我期待全面相同的价值。
我依赖于兼容和一致是错误的吗?javadoc对方法的含义非常明确,并且没有提到潜在的不兼容性。
我将用 Java 创建的文件的修改日期设置为特定数字。当我在 Windows 上读出该值时,我得到了相同的值。但是,在 Linux (ubuntu) 上,我得到了不同的值。File.lastModified() 的值关闭了 9 小时,但是当我查看文件属性时,我发现它仅关闭了 1 小时。我期待全面相同的价值。
我依赖于兼容和一致是错误的吗?javadoc对方法的含义非常明确,并且没有提到潜在的不兼容性。
这几乎可以肯定是时区问题。Java 方法使用/期望格林威治标准时间,操作系统将显示本地时间,这解释了那里的差异。现在真正的问题是:时间是如何存储在文件系统中的?
您使用的是什么文件系统?可能是 FAT32 - 它以本地时间存储时间戳,因此很难在操作系统之间保持一致。我不确定到底哪里出了问题,但这可能是操作系统配置问题或 JVM 错误——您在 Linux 上使用的是哪个 JVM?
你检查了返回值setLastModified
吗?
回报:
true if and only if the operation succeeded; false otherwise
我的猜测是这是一个时区问题。请注意,javadoc 说“自纪元以来的毫秒数(格林威治标准时间 00:00:00,1970年1 月 1 日)”(强调添加)。您传递给 setModified 的值是否可能是自纪元当地时间以来的毫秒数?如果是这样,那么您将需要一个小时,因为比利时的当地时间是 GMT + 1。这将解释属性对话框中的时间。
我无法解释与 lastModified() 的 9 小时差异,除非 java 或操作系统以某种方式缓存旧值。