2015-10-02 33 views
8

Jak przekonwertować kod org.joda.time.LocalDateTime na uniksowy znacznik czasu, biorąc pod uwagę, że czas lokalny znajduje się w strefie czasowej UTC?Konwersja Joda LocalDateTime na uniksowy znacznik czasu

przykład:

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

+0

Jeśli pamiętam, uniksowy znacznik czasu to liczba sekund od epoki Uniksa, może coś w stylu [to] (http://stackoverflow.com/questions/22990067/how/to-extract-epoch-from-localdate- i-localdatetime) – MadProgrammer

+1

'LocalDateTime' nie ma strefy czasowej, więc nie reprezentuje jednego ponit w czasie. Musisz określić strefę czasową, aby miało to jakikolwiek sens. –

+0

@JonSkeet To jest UTC! –

Odpowiedz

18

Zważywszy, że chcesz timestamp Unix „dana LocalDateTime, w UTC” najprostszym rozwiązaniem jest po prostu przekonwertować go do DateTime określając DateTimeZone dla UTC i przekonwertować:

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

Zanotować użycie tu sekund jako uniksowego znacznika czasu - inne API (np. java.util.Date) mogą oczekiwać milisekund od epoki Uniksa.

+0

Możesz także użyć 'DateTimeConstants.MILLIS_PER_SECOND' zamiast' 1000' lub użyć 'Duration.millis (local.toDateTime (DateTimeZone.UTC) .getMillis) .getStandardSeconds'. – mixel

+0

Proste i zadbane, kiedy programista Joda przedstawia powody, aby narazić getLocalMillis() na publiczne. Link: https://github.com/JodaOrg/joda-time/issues/87 – vijay