I'm writing a program which needs to determine files/directories last modified time. I want to handle this time using Joda Time, and I'm using Java 7 NIO.2 class Files to get file last modified time. Its getLastModifiedTime() method returns an instance of FileTime class, which has convenient method toMillis(), whose result I pass to Joda Time DateTime class constructor:
new DateTime(Files.getLastModifiedTime(path).toMillis());
However, I have a feeling that I'm doing this wrong, since DateTime(long) constructor explicitly mentions that DateTime instance will be created with default time zone. FileTime docs, however, do not mention its time zone anywhere. I looked through FileTime code; it seems to be very simple, and its toString() method suggests that it is using UTC time zone (it creates a Calendar in UTC time zone and sets its milliseconds directly).
So, does FileTime uses UTC or local time? What is the correct way to convert FileTime to DateTime?
A Java millisecond timestamp is a UTC timestamp. It's what
FileTime.toMillis()returns, and what theDateTimeconstructor expects. The same applies to other Java API methods; e.g. theSystem.currentTimeMillis()method, thejava.util.Dateconstructor, and so on.They all work the same way. And, indeed, so do other Unix / Linux / OSX library methods in other programming languages.
The only case where this breaks is if someone configures / sets the system clock incorrectly.