2015-10-02 19 views
8

Come si converte un org.joda.time.LocalDateTime in un timestamp Unix, dato che l'ora locale è nel fuso orario UTC?Converti Joda LocalDateTime in Unix timestamp

Esempio:

new LocalDateTime(2015, 10, 02, 11, 31, 40)>1443785500.

+0

Se ricordo, il timestamp Unix è il numero di secondi dall'epoca Unix, forse qualcosa come [questo] (http://stackoverflow.com/questions/22990067/how-to-extract-epoch-from-localdate- and-localdatetime) – MadProgrammer

+1

Un 'LocalDateTime' non ha un fuso orario, quindi non rappresenta un ponit nel tempo. È necessario specificare un fuso orario affinché ciò abbia un senso. –

+0

@JonSkeet È UTC! –

risposta

18

Dato che si desidera che il timestamp Unix "il dato LocalDateTime, in UTC" l'approccio più semplice è solo quello di convertirlo in un DateTime specificando l'DateTimeZone per UTC, e convertire che:

LocalDateTime local = new LocalDateTime(2015, 10, 02, 11, 31, 40); 
DateTime utc = local.toDateTime(DateTimeZone.UTC); 
long secondsSinceEpoch = utc.getMillis()/1000; 

Nota del uso di secondi qui come timestamp Unix - altre API (es. java.util.Date) potrebbero aspettarsi millisecondi dall'epoca Unix.

+0

Inoltre puoi usare 'DateTimeConstants.MILLIS_PER_SECOND' invece di' 1000' o usare 'Duration.millis (local.toDateTime (DateTimeZone.UTC) .getMillis) .getStandardSeconds'. – mixel

+0

Semplice e pulito, quando lo sviluppatore Joda sta esponendo i motivi per esporre getLocalMillis() come pubblico. Link: https://github.com/JodaOrg/joda-time/issues/87 – vijay