Konvertieren einer ISO 8601-kompatiblen Zeichenfolge in java.util.Date

Ich versuche zu konvertieren ISO 8601 formatierten String, java.util.Datum.

Fand ich das Muster "yyyy-MM-dd NICHT'HH:mm:ssZ" werden nach ISO8601-konform, wenn verwendet mit einem Gebietsschema (Vergleiche Beispiel).
Allerdings wird die Verwendung der java.text."=SimpleDateFormat, ich kann nicht konvertieren, die korrekt formatierte Zeichenfolge "2010-01-01T12:00:00+01:00". Ich habe es vorher erst konvertieren zu "2010-01-01T12:00:00+0100" ohne den Doppelpunkt.
So, die aktuelle Lösung ist

SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.GERMANY);
String date = "2010-01-01T12:00:00+01:00".replaceAll("\\+0([0-9]){1}\\:00", "+0$100");
System.out.println(ISO8601DATEFORMAT.parse(date));

die offensichtlich nicht nett. Übersehe ich etwas oder gibt es eine bessere Lösung?

Antwort

Dank JuanZe Kommentar, ich fand die Joda-Time Magie, es ist auch hier beschrieben.
So, die Lösung ist

DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
String jtdate = "2010-01-01T12:00:00+01:00";
System.out.println(parser2.parseDateTime(jtdate));

Oder einfach, verwenden Sie die Standard-parser über den Konstruktor:

DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" ) ;

Mir, das ist schön.

InformationsquelleAutor der Frage Ice09 | 2010-02-04

Schreibe einen Kommentar