2013-07-18 13 views
9

I umgewandelt Datestring von Format YYYY-mm-DD HH:MM:SS in meinem JSON und beharren auf POJO mit dem CodeWie Joda Zeit dieses Format

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
this.startDate = format.parseDateTime(startDate); 

Wenn ich die POJO konvertiere zurück zu JSON, das Datum geschrieben wird, wie 2013-07-12T18:31:01.000Z zu analysieren.
Wie analysieren wir die Zeitzeichenfolge 2013-07-12T18:31:01.000Z zurück zu JodaDateTime-Objekt. Was sollte der Formatierer sein?
benutzte ich YYYY-mm-DD HH:MM:SS und es hat nicht funktioniert

+0

Warum Sie nicht 'Date' verwenden, anstatt ein das formatierte Datum? Dies wird alle Ihre Probleme mit der Formatierung loswerden. Sie sollten das Datum nur als String formatieren, um es dem Benutzer anzuzeigen. Software sollte sich bei der Verarbeitung von Datumsangaben nicht um das Datumsformat kümmern. – m0skit0

Antwort

33

2013-07-12T18:31:01.000Z ist Standart-ISO-Datumsformat.
können Sie standart Joda Datum Zeit-Formatierungs ISODateTimeFormat::dateTime()
Beispiel verwenden:

String startDate = "2013-07-12T18:31:01.000Z"; 
    DateTime dt = ISODateTimeFormat.dateTime().parseDateTime(startDate); 

in diesem Fall Datum werden in Ihrer Zeitzone bisher umgesetzt werden.
Wenn Sie Ihre Zeitzone UTC Zone in Formatter verwenden ignorieren wollen:

String startDate = "2013-07-12T18:31:01.000Z"; 
    DateTime dt = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC).parseDateTime(startDate); 
3

Sie X zu Ihrem Muster anhängen soll. Die SimpleDateFormat API enthält eine vollständige Liste der Felder, die Sie in einer DateFormat verwenden können, einschließlich X für "ISO 8601 Zeitzone".

eine ISO 8601-Zeitzone wird als

spezifiziert

Die Anzahl der Musterbuchstaben bezeichnet das Format sowohl für Formatierung und Analyse wie folgt:

ISO8601TimeZone: 
     OneLetterISO8601TimeZone 
     TwoLetterISO8601TimeZone 
     ThreeLetterISO8601TimeZone 
OneLetterISO8601TimeZone: 
     Sign TwoDigitHours 
     Z 
TwoLetterISO8601TimeZone: 
     Sign TwoDigitHours Minutes 
     Z 
ThreeLetterISO8601TimeZone: 
     Sign TwoDigitHours : Minutes 
     Z 
1

Die API doc ist nicht ganz klar: ein

OneLetterISO8601TimeZone bedeutet 'X' lesen und Ausbeuten Zweistelligestunden oder Z-Zeichen,

daher so etwas wie -05

TwoLetterISO8601TimeZone bedeutet 'XX' und Erträge Zweistelligestunden Minuten oder Z-Zeichen,

daher so etwas wie -0500

und ThreeLetterISO8601TimeZone bedeutet 'XXX' und Erträge Anmeldung Zweistelligestunden: Minuten

daher so etwas wie -05: 00