当前位置: 首页 > 面试题库 >

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

龙玄天
2023-03-14
问题内容

当我使用读取mtimeJava文件的时Files.getLastModifiedTime,返回值被截断为整秒。我知道这可以在其他系统上获得毫秒级的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

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


问题答案:

通过此提交,在Java
8中添加了在* nix系统上以更高的精度获取文件时间戳的功能,但是,在本机方面,它要求符合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构建没有设置它,因此时间戳的纳秒部分不可用,并且保持零。



 类似资料:
  • 刚刚在Android中创建了一个相机预览,带有以下配置: 现在的问题是,这样的目标分辨率可能不可用,在这种情况下,预览将选择与请求的分辨率接近的分辨率。我在这里要问的是,如何知道预览中有效地选择了哪种分辨率。 提前感谢!

  • 问题内容: 我想知道如果有一种方法,因为1970年1月1日(时期),以获得当前毫秒使用新的,或Java的8类。 已知的方法如下: 要么 问题答案: 我不能完全确定“当前毫秒”的含义,但我假设这是自“纪元”(即UTC 1970年1月1日午夜)以来的毫秒数。 如果你想找到,因为时代的毫秒数 眼下, 然后用作为nubian菜鸟指出。如果是这样,则没有理由使用任何新的java.time API来执行此操作

  • 问题内容: 我需要找到访问我的网站的用户屏幕的屏幕分辨率? 问题答案: 您无法使用纯PHP做到这一点。您必须使用JavaScript来完成。有几篇有关如何执行此操作的文章。 本质上,您可以设置cookie,甚至可以执行一些Ajax来将信息发送到PHP脚本。如果使用jQuery,则可以执行以下操作: jQuery: PHP(some_script.php) 所有这些实际上都是最基本的,但是它应该可以

  • 引用脚本的内容: OutFile "ScreenRes.exe" Name "Get User Screen Resolution" Caption "Get User Screen Resolution" XPStyle "on" Function ".onInit" System::Call 'user32::GetSystemMetrics(i 0) i .r0' System::Call

  • 问题内容: 我正在尝试获取格式化的日期,包括毫秒数。 唯一的问题是我不断赚到000000 例如 2013/07/28 11:26:14.000000 问题答案: php.net说: 微秒(在PHP 5.2.2中添加)。请注意,由于它采用整数参数,因此将始终生成,而如果使用微秒创建,则支持微秒。 所以使用起来很简单: 推荐和使用参考类: 注意是微秒(1秒= 1000000 µs)。 来自php.ne