2012-04-01 10 views
5

Napisałem prostą metodę Utila, aby przekonwertować String w Javie na util.Date. Co nie jestem w stanie dowiedzieć się, dlaczego metoda działa dla pierwszego wejścia, a nie na drugim, biorąc pod uwagę, że środki te są identyczne:Niespójne ParseExeption z formatem danych w Javie

Kod:

package util; 

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

public class StringToDate { 

    public Date getDateFromString(String strDate, String dateFormat) { 

     DateFormat df = new SimpleDateFormat(dateFormat); 
     Date date = null; 

     try { 

      date = df.parse(strDate); 

     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(date); 

     return date; 
    } 

    public static void main(String[] args) { 

     StringToDate s2d = new StringToDate(); 

     s2d.getDateFromString("12-18-11, 10:36 AM","MM-dd-yy, hh:mm a"); 
     s2d.getDateFromString("02-04-12, 01:17 PM","MM-dd-yy, hh:mm a"); 
    } 
} 

wyjściowa:

Sun Dec 18 10:36:00 CET 2011 
null 
java.text.ParseException: Unparseable date: "02-04-12, 01:17 PM" 
    at java.text.DateFormat.parse(DateFormat.java:337) 
    at util.StringToDate.getDateFromString(StringToDate.java:17) 
    at util.StringToDate.main(StringToDate.java:33) 

Logicznie, wyjście powinno być Sat Feb 04 13:17:00 CET 2012 idące przez pierwsze wyjście. Dlaczego wyrzucany jest ParseException?

EDIT: Poniższe dwie linie działają poprawnie:

s2d.getDateFromString("02-04-12", "MM-dd-yy"); 
s2d.getDateFromString("01:17 PM", "hh:mm a"); 

wyjściowa:

Sat Feb 04 00:00:00 CET 2012 
Thu Jan 01 13:17:00 CET 1970 

jednak wyjątek dzieje, gdy próbuję analizować zarówno datę i czas razem.

+0

Jestem zdezorientowany - to działa dobrze dla mnie. –

+0

Ja też - w jakiej jesteś kulturze? Dzięki za dołączenie krótkiego, ale kompletnego programu, pamiętajcie: –

+0

@JonSkeet: Nie rozumiem, o co ci chodzi w "jakiej kulturze jesteś?", Ale dzięki za komplement! Czy program działa dobrze? Używam JDK 1.6 (1.6.0.11). Wypróbowałem Eclipse, a nawet klasyczną trasę polecenia do uruchomienia powyższej [SSCCE] (http://homepage1.nifty.com/algafield/sscce.html). Nadal, ten sam wyjątek; ta sama niespójność. Wsparcie! – SNag

Odpowiedz

7

Czy masz spację nierozdzielającą lub jakiś inny znak spacji Unicode, gdzieś w łańcuchu daty lub maski formatu?

Udało mi się odtworzyć błąd, jeśli zastąpiłem jedną z spacji w drugiej z twoich ciągów daty nieprzestrzegającą spacji, taką jak Unicode character 160.

+0

Doskonałe złapanie !! Tak, to było to! O mój! Łańcuch daty w powyższym programie został faktycznie skopiowany z zewnętrznego tekstu, który próbowałem przeanalizować.W jaki sposób można wyeliminować takie niełamiące się przestrzenie i zastąpić je rzeczywistą białą przestrzenią? – SNag

+1

+1 Bo teraz mogę żyć dalej. Nie byłbym w stanie spać, dopóki nie dowiem się, co się tutaj naprawdę dzieje :) –

+0

Znaleziono to, czego szukałem: 'cleanString = dirtyString.replace (" \ u00a0 "," ")' lub 'cleanString = dirtyString .replace (" ", "") 'eliminuje powodowany przez parsowanie wyjątek **   **! :) – SNag

Powiązane problemy