gpt4 book ai didi

java - 从 Java 获取毫秒分辨率的文件 mtime

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:21 26 4
gpt4 key购买 nike

当我使用 Files.getLastModifiedTime 从 Java 读取文件的 mtime 时,返回值被截断为整秒。我知道这适用于其他系统以获取毫秒分辨率的时间,那么我的有什么不同?

这是一个完整的独立测试,可以编译和运行:

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

我在带有 ext4 的 Linux 上运行。我尝试了 openjdk 1.7 和 Oracle jdk 1.8。

最佳答案

在 Java 8 中通过 this commit 添加了在 *nix 系统上以更高精度获取文件时间戳的能力。 ,但是,在 native 方面,它需要 POSIX 2008 合规性:

#if (_POSIX_C_SOURCE >= 200809L) || defined(__solaris__)
(*env)->SetLongField(env, attrs, attrs_st_atime_nsec, (jlong)buf->st_atim.tv_nsec);
(*env)->SetLongField(env, attrs, attrs_st_mtime_nsec, (jlong)buf->st_mtim.tv_nsec);
(*env)->SetLongField(env, attrs, attrs_st_ctime_nsec, (jlong)buf->st_ctim.tv_nsec);
#endif

而且,显然,您正在使用的 Java 构建没有设置它,因此时间戳的纳秒部分不可用并保持为零。

关于java - 从 Java 获取毫秒分辨率的文件 mtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com