当我使用Files.getLastModifiedTime
从Java读取文件的mtime
时,返回值被截断为整秒。我知道这在其他系统上可以获得毫秒级分辨率的mtimes,那么我的系统会有什么不同呢?
下面是一个完整的独立测试,该测试将编译并运行:
import java.nio.file.attribute.FileTime;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Test {
public static void main(String[] args) throws java.io.IOException {
FileTime timestamp = Files.getLastModifiedTime(Paths.get("/tmp/test"));
System.out.println(timestamp.toMillis());
}
}
输出是(使用我的特定测试文件)1405602038000
,而ls
显示:
$ ls --full-time /tmp/test
-rw-rw-r-- 1 daniel daniel 0 2014-07-17 16:00:38.413008992 +0300 /tmp/test
我希望Java输出为1405602038413
。
我在Linux上运行ext4,我尝试了openjdk1.7和Oracle jdk1.8。
5条答案
按热度按时间csga3l581#
this commit在Java 8中添加了在 *nix系统上以更高精度获取文件时间戳的功能,但在本机端,它需要符合POSIX 2008:
显然,您使用的Java构建版本没有设置它,因此时间戳的纳秒部分不可用,保持为零。
j8yoct9x2#
我看了源代码:
在Java 7的情况下,该方法给出了上次修改的时间戳,精度为1秒:
在Java 8的情况下,它 * 看起来 * 应该给予微秒精度:
但是在这两种情况下,代码似乎都没有提供获取不同精度的时间戳的方法。
ia2d9nvy3#
它似乎在java 9中得到了修复
Files.getLastModifiedTime
提供毫秒级分辨率Files.getLastModifiedTime
提供了第二种解决方案7vhp5slm4#
您可以使用
toInstant().getNano()
访问纳秒产量:
xuo3flqw5#
可以使用简单的日期格式以毫秒为单位显示时间: