2014-10-16 5 views
6

Ich muss eine Zeichenfolge in Java analysieren. Meine Zeichenfolge hat folgendes Format:Parsing Saite bis heute: Illegales Musterzeichen "T".

2014-09-17T12:00:44.0000000Z 

aber java wirft die folgende Ausnahme, wenn sie versuchen solches Format zu analysieren ... java.lang.IllegalArgumentException: Illegal pattern character 'T'.

Irgendwelche Ideen, wie das zu parsen?

Vielen Dank!

+3

Wie parsen Sie? –

+1

current_date = formatter.parse (Datum) – mbezunartea

+0

Fügen Sie das formatter Objekt auch hier hinzu –

Antwort

12

Bei Ihrer Eingabe von 2014-09-17T12:00:44.0000000Z, genügt es nicht, den Brief zu entkommen T nur. Sie müssen auch die nachfolgende Z behandeln. Aber Achtung, diese Z ist kein Literal, sondern hat die Bedeutung UTC+00:00 Zeitzone Offset nach ISO-8601-standard. Es ist also NICHT richtig, Z zu entkommen.

SimpleDateFormat behandelt diese spezielle char Z von Muster Symbol X. So ist die endgültige Lösung sieht so aus:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSX"); 
Date d = sdf.parse("2014-09-17T12:00:44.0000000Z"); 
System.out.println(d); // output: Wed Sep 17 14:00:44 CEST 2014 

Beachten Sie, dass die verschiedenen Taktzeit rechts für Zeitzone ist CEST (toString() verwendet Systemzeitzone), und das Ergebnis entspricht UTC-time 12:00:44. Außerdem musste ich sieben Symbole S einfügen, um Ihre Eingaben korrekt zu verarbeiten, die eine Genauigkeit von 100ns vorgeben (obwohl Java Pre 8 nur Millisekunden verarbeiten kann).

+0

aber ein Kommentar, Sie müssen das letzte X-Zeichen durch 'Z' im Konstruktor SimpleDateFormat ersetzen. Gute Lösung, funktionierte für mich –

+0

@VictorPonomarenko Der Symbolbuchstabe X wurde mit Java 7 eingeführt. Für Java 6 bin ich nicht sicher, ob Z als Ersatz funktioniert, wenn das analysierte Literal "Z" als UTC + 00 erkannt wird! Vielleicht ist es besser, die Umgehungslösung für Java 6 zu verwenden, um Z zu umgehen (nur als Literal interpretierend) UND die Zone auf "GMT" im 'SimpleDateFormat'-Objekt zu setzen. –

+0

auf Android bekomme ich Laufzeit Ausnahme, wenn X Zeichen verlassen, aber nach dem Ersatz 'Z' funktioniert gut (Android arbeitet jetzt auf Java 7) –

7

Sie haben den 'T' Charakter zu entkommen:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US); 
    format.setTimeZone(TimeZone.getTimeZone("UTC")); 
    Date parse = format.parse("2014-09-17T12:00:44.0000000Z"); 

Mit Antwort: What is this date format? 2011-08-12T20:17:46.384Z

+0

Danke für deine Antwort, jetzt bekomme ich nicht die selbe Ausnahme, sondern diese: "java.text.ParseException: Unratedable date:" Date "". Ich denke, dass das Datumsformat noch nicht gut definiert ist ... – mbezunartea

1

Versuchen Sie es.

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateClass { 
    public static void main(String[] args) throws ParseException { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
     Date d = sdf.parse("2014-09-17T12:00:44.0000000Z"); 
     System.out.println(d); //output Wed Sep 17 12:00:44 IST 2014 
    } 
}