2017-04-19 1 views
-2

Ich erzeuge etwas UTC-Zeit auf meinem Backend und sende es an meine Android-Anwendung mit websockets.Falsche Zeitzoneninformationen mit Java JodaTime

Das Problem ist: wenn ich das Datum anzeigen, ist es um 3 Stunden zurück, was ist, weil ich nehme an, dass mein Telefon in der +3 Zeitzone ist.

Unten finden Sie einen Auszug aus dem Backend-Code und dem Android-Code.

Backend-Code (das ist, wie ich das UTC-Datum am Erzeugen der Moment-Bibliothek):

let d = moment.utc().toISOString(); 

In meiner Applikation für Android das ist, wie ich es bin Handhabung:

String sendDate = "2017-04-19T15:41:36.758Z"; //this is an example server response 
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
dtf.parseLocalDateTime(sendDate).toDate() 

Das Problem ist, dass das UTC-Datum nicht richtig in der Zeitzone angezeigt/konvertiert wird, in der sich das Telefon gerade befindet, so dass das Datum immer um 3 Stunden zurückliegt.

Was fehlt mir?

+0

Haben Sie überprüft die Standard-Telefon 'TimeZone' (das Ergebnis von' DateTimeZone.getDefault() ')? –

+0

Und was ist die Ausgabe, die Sie gegen die erwartete Ausgabe bekommen? –

+1

Versuchen Sie 'dtf.parseLocalDateTime (sendDate) .toDate (DateTimeZone.UTC)' weil ich befürchte, dass 'toDate()' ohne Argument implizit die Systemzeitzone verwendet (mit Daten von Joda-Time). Und Ihre 'LocalDateTime' basiert offensichtlich auf UTC-Eingabe ... –

Antwort

0

Die Lösung besteht darin, eine Zeitzone für die Methode toDate() anzugeben.

dtf.parseLocalDateTime(sendDate).toDate(DateTimeZone.UTC.toT‌​‌​imeZone())

Verwandte Themen