2013-05-28 26 views
7

Mam świadomość, że istnieje kilka pytań na ten temat. Ale mam problem z określonym wzorem daty. Oto przykład:Wyodrębnij strefę czasową ze stringa

20130401100000[-03:EST] 

Mam troble z -03 ponieważ zgodnie z dokumentacją SimpleDateFormat powinien mieć 4 cyfry. Najbliższy wzór to:

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

Ale z powodu 2 cyfr po prostu nie zadziała. Oto przykładowy kod używam do testów:

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)); 
} 

Kiedy wydrukuj new Date() uzyskać to:

20130528155734[+0000:GMT] 

Ale gdy próbuję podczas analizowania input otrzymuję następujący wyjątek:

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) 

Czy ktoś wie, jak mogę przeanalizować input w Date z poprawną TimeZone?

Odpowiedz

1

Można poprawić formatowanie z:

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)); 
} 

Jeżeli będziesz prawidłowo sformatowany termin miesza się z niepoprawnie sformatowanych nich, możesz użyć:

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

podoba mi się rozwiązanie z 'replaceAll' wydaje elegancki. Dzięki :-) –

0

JDK 7 obsługuje nowsze wzory w SimpleDateFormat

W szczególności znak X dodaje obsługę strefy czasowej ISO 8601.

Spróbuj wzorca JDK 7

DateFormat df = nowy SimpleDateFormat ("rrrrmmddggmmss '[' X ':' z ']");

Na JDK 7 otrzymałem następujące dane wyjściowe.

20130602140935 [Z: GMT] Pon 01 kwietnia 2013 13:00:00 GMT