2016-07-20 59 views
0

Ich habe JSON String, der von mongodb zurückgegeben wird.Zeit falsch nach dem Hinzufügen Format Datum in Gson Builder

[{"_id":"578bb51aa51d15940688809e","name":"aaa","date":"2016-07-20T11:47:39.302Z"}] 

Ich habe gson verwendet, um das Java-Objekt zu konvertieren. Ich habe Unparseable date: "2016-07-20T11:47:39.302Z". Also fügte ich gson Erbauer Datumformat hinzu.

Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create(); 

Das Datum Ergebnis ist Wed Jul 20 11:47:39 MMT 2016. Die Zeit ist incorrect.

Was ist das bessere Datumsformat für Datumszeichenfolgen?

Wie kann ich das geeignete Datumsformatmuster anhand der angegebenen Datumszeichenkette auswählen?

+0

Was ist falsch an der Zeit? Die Zeit ist '11: 47: 39' in beiden Saiten. – Bryan

+0

Eigentlich ist das Datum Erstellungsdatum. Es sollte "16: 48" sein, weil ich dieses Dokument zu dieser Zeit hinzugefügt habe. – user1156041

+0

@ user1156041 So bekommen Sie ein Problem mit einem unpassierbaren Datum oder eine falsche Zeit? Warum ist es inkorect, wenn es in json von Mongo in deinem "Ergebnis" ist? Bitte sei klarer. – Divers

Antwort

3

Wenn ich mich nicht irre, haben Sie ein Problem mit Zeitzoneninformationen. Sowohl das JavaScript Date Objekt als auch das Java Date Objekt repräsentieren einen Punkt in universal coordinated time (UTC). Weder das JavaScript-Objekt Date noch das Java-Objekt Date enthalten Zeitzoneninformationen.


Randbemerkung: Das Java Date Objekt tut enthält tatsächlich die Zeitzoneninformationen, weshalb Sie die Zeitzone (MMT in Ihrem Fall) zu sehen, wenn Sie date.toString() nennen. Allerdings sollte diese Zeitzone ignoriert werden, da die Zeitzonenunregelmäßigkeiten einige der many issues mit den Java 7- Date/Time-Klassen hervorheben.


Die GsonBuilder().setDateFormat() Methode setzt das String-Format, das ein Java Date Objekt zu und von deserialisiert serialisiert werden soll. Dieses Format enthält keine Zeitzoneninformationen, da das Objekt Date diese Informationen nicht enthält.

Um Anzeige die UTC-Zeit, die Ihr Date Objekt in der richtigen Zeitzone darstellt, müssen Sie diese Zeitzone bereitstellen. Dies ist nicht mit Gson während der Deserialisierung getan, aber wenn Sie Anzeige tatsächlich das Datum/Zeit:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
simpleDateFormat.setTimeZone(TimeZone.getDefault()); 

String zonedDateTime = simpleDateFormat.format(date); 

Android kommt auch mit einer praktischen DateUtils Klasse statt SimpleDateFormat zu verwenden, die der Zeitzone für Sie behandeln sowie Locale Informationen.

DateUtils.formatDateTime(getContext(), date.getTime(), 
         DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_ABBREV_ALL); 
+0

Ja, funktioniert perfekt, wenn ich 'simpleDateFormat.setTimeZone (TimeZone.getTimeZone (" UTC ")) ändern;' – user1156041