2013-08-26 25 views
7

Sto scrivendo un programma che deve determinare i file/le directory dell'ultima ora modificata. Voglio gestire questa volta utilizzando Joda Time e sto utilizzando la classe NIO.2 Java 7 Files per ottenere l'ultima modifica del file. Il suo metodo di getLastModifiedTime() restituisce un'istanza di FileTime classe, che dispone di un comodo metodo toMillis(), il cui risultato mi passa a Joda Tempo DateTime costruttore di classe:Java 7 NIO.2 Fuso orario Files.getLastModifiedTime

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

Tuttavia, ho la sensazione che sto facendo questo torto, dal momento che DateTime(long) il costruttore menziona esplicitamente che l'istanza DateTime verrà creata con il fuso orario predefinito. I documenti FileTime, tuttavia, non menzionano il fuso orario da nessuna parte. Ho controllato il codice FileTime; sembra essere molto semplice, e il suo metodo toString() suggerisce che sta usando il fuso orario UTC (crea un Calendar in fuso orario UTC e ne imposta direttamente i millisecondi).

Quindi, FileTime utilizza UTC o ora locale? Qual è il modo corretto di convertire FileTime in DateTime?

risposta

5

Un timestamp Java millisecondo è un timestamp UTC. È ciò che restituisce FileTime.toMillis() e cosa si aspetta il costruttore DateTime. Lo stesso vale per altri metodi API Java; per esempio. il metodo System.currentTimeMillis(), il costruttore java.util.Date e così via.

Tutti funzionano allo stesso modo. E, in effetti, anche altri metodi di libreria Unix/Linux/OSX in altri linguaggi di programmazione.

L'unico caso in cui questo si interrompe è se qualcuno configura/imposta l'orologio di sistema in modo errato.

+0

Grazie, ora capisco. Per qualche ragione ho pensato che il timestamp previsto dal 'DateTime' constructor nel fuso orario locale, ma, come hai detto, il timestamp è sempre in UTC. Quindi l'argomento 'DateTimeZone' in un altro costruttore' DateTime' definisce solo come dovrebbe essere visualizzato questo timestamp. –

1

FileTime.toMillis() API dice che restituisce il valore in millisecondi, dall'epoca (1970-01-01T00: 00: 00Z). new DateTime (millis) crea un'istanza DateTime che contiene il tempo in millisecondi dall'epoca Java di 1970-01-01T00: 00: 00Z e Cronologia nel fuso orario predefinito che determina il modo in cui il valore del millisecondo viene convertito nei campi di data e ora.