2013-05-28 28 views
7

Ich bin mir bewusst, dass es mehrere Fragen gibt. Aber ich habe ein Problem mit einem bestimmten Datumsmuster. Hier ein Beispiel:Zeitzone aus String extrahieren

20130401100000[-03:EST] 

Ich habe troble mit den -03 weil nach der SimpleDateFormat Dokumentation sollte es 4 Stellen hat. Das nächstgelegene Muster ich es habe, war dies:

yyyyMMddHHmmss'['Z':'z']' 

Aber wegen der 2-stellig es einfach nicht funktionieren. Hier ist ein Codebeispiel I für Tests bin mit:

public static void main(String[] args) throws ParseException { 
    String input = "20130401100000[-03:EST]"; 

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'"); 
    df.setTimeZone(TimeZone.getTimeZone("GMT"));  

    System.out.println(df.format(new Date())); 
    System.out.println(df.parse(input)); 
} 

Wenn ich drucke die new Date() ich dieses:

20130528155734[+0000:GMT] 

Aber wenn ich versuche, das Parsen der input ich die folgende Ausnahme erhalten:

Exception in thread "main" java.text.ParseException: Unparseable date: "20130401100000[-03:EST]" 
at java.text.DateFormat.parse(DateFormat.java:337) 
at Teste.main(Teste.java:17) 

Weiß jemand, wie ich die input in eine Date mit der richtigen TimeZone analysieren kann?

Antwort

1

Sie können korrigieren Sie die Formatierung mit:

public static void main(String[] args) throws ParseException { 
    String input = "20130401100000[-03:EST]"; 

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'"); 
    df.setTimeZone(TimeZone.getTimeZone("GMT"));  

    System.out.println(df.format(new Date())); 
    input = input.replace(":","00:"); 
    System.out.println(df.parse(input)); 
} 

Wenn Sie richtig Daten gemischt mit falsch formatiert diejenigen formatiert werden, die Sie verwenden können:

input = input.replaceAll("(\\[[+-]\\d{2}):","$100:"); 
+0

ich die Lösung mit 'replaceAll' mag, scheint elegant. Vielen Dank :-) –

0

JDK 7 unterstützt neuere Muster in SimpleDateFormat

Speziell X-Zeichen fügt Unterstützung für Zeitzone ISO 8601 hinzu.

Versuchen, dieses Muster mit JDK 7

Dateformat df = new Simpledate ("yyyyMMddHHmmss '[' X ':' z ']'");

Am JDK 7 bekam ich folgende Ausgabe.

20130602140935 [Z: GMT] Mo 1. April 13.00.00 GMT 2013