2013-11-23 4 views
27

würde ich jede Hilfe dankbar mit Bug für diese Ausnahme zu finden:java.text.ParseException: unparseable Datum "yyyy-MM-dd'T'HH: mm: ss.SSSZ" - Simple

java.text.ParseException: Unparseable date: "2007-09-25T15:40:51.0000000Z" 

und folgender code:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
Date date = sdf.parse(timeValue); 
long mills = date.getTime(); 
this.point.time = String.valueOf(mills); 

Es wird expection mit Date date = sdf.parse(timeValue); ausgelöst.

timeValue = "2007-09-25T15:40:51.0000000Z";, wie in der Ausnahme.

Danke.

+0

Müssen Sie sogar für ".SSSZ" analysieren? Wenn Sie nur Datum oder Uhrzeit angeben möchten, entfernen Sie die Datei ".SSSZ". –

Antwort

57

Z repräsentiert das Zeitzonenzeichen. Es muss angegeben werden:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
+1

Oder verwenden Sie möglicherweise X anstelle von Z, so dass Z als Zeitzone ISO8601 akzeptiert wird, für die "Z" als UTC-Zeitzonenbezeichner geparst wird. – DNA

+0

Mit 'X' wird eine' ParseException' ausgelöst, selbst wenn sie zitiert wird. – Reimeus

+0

Die Verwendung von X funktioniert für mich, ABER scheint eine genaue Anzahl von S (Millisekunden) Zeichen in den Mustern zu benötigen, was seltsam ist - siehe meine Antwort ... – DNA

3

In Java 7 Sie auch die X Muster verwenden, um eine ISO8601 Zeitzone anzupassen, die den besonderen Z (UTC) Wert beinhaltet:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSX"); 
Date date = sdf.parse("2007-09-25T15:40:51.0000000Z"); 

Allerdings scheint es erfordern eine exakte Anzahl von Millisekunden Zeichen in dem Muster, was für das Zeichenmuster 'Z' nicht erforderlich ist, und ist eher unbequem. Ich denke, das liegt daran, dass die ISO8601-Definition auch "zweistellige Stunden" enthält, die nur Zahlen sind, so dass der Parser die vorhergehenden Millisekunden nicht unterscheiden kann.

Also diese Version wäre gut für Zeitstempel bis zur zweiten Genauigkeit, weniger für Millisekunden.

+0

'IllegalArgumentException: Unbekannte Musterzeichen 'X'' –

+1

Igor - welche Version von Java gibt das Error? Das 'X'-Muster ist [eindeutig dokumentiert] (https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) für Java 7 und funktioniert auch für mich unter Java 8. – DNA

+0

Ich verwende die ThreeTenABP-Bibliothek in meinem Android-Projekt (Java 8). –