Java 7 NIO.2 Files.getLastModifiedTime时区

Vla*_*eev 8 java datetime date jodatime nio2

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

new DateTime(Files.getLastModifiedTime(path).toMillis());
Run Code Online (Sandbox Code Playgroud)

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

那么,确实FileTime使用UTC或当地时间吗?什么是转换正确的方式FileTimeDateTime

Ste*_*n C 6

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

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

如果有人正确配置/设置系统时钟,那么这种情况就会中断.