8

我正在编写一个需要确定文件/目录上次修改时间的程序。我想使用 Joda Time 来处理这个时间,并且我正在使用 Java 7 NIO.2 类Files来获取文件的最后修改时间。它的getLastModifiedTime()方法返回一个FileTime类的实例,该实例具有方便的方法toMillis(),我将其结果传递给 Joda TimeDateTime类构造函数:

new DateTime(Files.getLastModifiedTime(path).toMillis());

但是,我觉得我做错了,因为DateTime(long)构造函数明确提到该DateTime实例将使用默认时区创建。FileTime但是,文档没有在任何地方提及其时区。我查看了FileTime代码;它似乎很简单,它的toString()方法表明它正在使用 UTC 时区(它Calendar在 UTC 时区中创建一个并直接设置它的毫秒数)。

那么,FileTime使用UTC还是当地时间?FileTime转换为的正确方法是DateTime什么?

4

2 回答 2

6

Java 毫秒时间戳是 UTC 时间戳。它是FileTime.toMillis()返回的,也是DateTime构造函数所期望的。这同样适用于其他 Java API 方法;例如System.currentTimeMillis()方法、java.util.Date构造函数等。

他们都以同样的方式工作。事实上,其他编程语言中的其他 Unix / Linux / OSX 库方法也是如此。

这种中断的唯一情况是有人错误地配置/设置了系统时钟。

于 2013-08-26T06:51:41.310 回答
1

FileTime.toMillis() API 表示它以毫秒为单位返回值,自纪元 (1970-01-01T00:00:00Z) 起。new DateTime(millis) 创建一个 DateTime 实例,它保存从 Java 纪元 1970-01-01T00:00:00Z 开始的时间(以毫秒为单位)和默认时区中的 Chronology ,它决定了如何将毫秒值转换为日期时间字段。

于 2013-08-26T06:47:13.643 回答