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 the DateTime
constructor expects. The same applies to other Java API methods; e.g. the System.currentTimeMillis()
method, the java.util.Date
constructor, 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.
FileTime.toMillis() API says it returns the value in milliseconds, since the epoch (1970-01-01T00:00:00Z). new DateTime(millis) creates a DateTime instance wich holds time in milliseconds from the Java epoch of 1970-01-01T00:00:00Z and Chronology in the default time zone which determines how the millisecond value is converted into the date time fields.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With