Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java 7 NIO.2 Files.getLastModifiedTime time zone

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?

like image 569
Vladimir Matveev Avatar asked Aug 26 '13 06:08

Vladimir Matveev


2 Answers

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.

like image 198
Stephen C Avatar answered Nov 11 '22 06:11

Stephen C


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.

like image 37
Evgeniy Dorofeev Avatar answered Nov 11 '22 08:11

Evgeniy Dorofeev