2012-01-18 9 views
6

Chciałbym przeanalizować datę. Moja data "String" to "Czw Sty 19 2012 08:00 PM". Mój kod do przeanalizowania to:java.text.ParseException: Nie można odczytać daty: "Czw Sty 19 2012 08:00 PM"

format = new SimpleDateFormat("EEE MMM dd yyyy hh:mm aaa"); 
this.settDate(new Timestamp((format.parse(sDate)).getTime())); 

Jednak to nie działa. Jak mogę przeanalizować tę datę?

pełna metoda jest:

public void saveTask(int iDevice, String description, String sDate) throws ParseException { 
    format = new SimpleDateFormat("EEE MMM dd yyyy hh:mm aaa"); 
    this.setiDeviceId(iDevice); 
    this.setsDescription(description); 
    this.settDate(new Timestamp((format.parse(sDate)).getTime())); 
    DatabaseManager.save(this); 
} 

I wyjątek: obraz

java.text.ParseException: Unparseable date: "Thu Jan 19 2012 01:00 AM" 

Debug:

enter image description here

Dzięki!

+0

Czy wypróbowałeś 'format = new SimpleDateFormat (" EEE MMM dd rrrr gg: mm a ");' – bdares

+0

Twój kod działa dobrze dla mnie. Pokaż więcej kodu. – dogbane

+0

twój format jest w porządku, działa dla mnie, dostaję: 'Thu Jan 19 20:00:00 SAST 2012' jaki jest twój błąd, jak to nie działa? – epoch

Odpowiedz

15

Spróbuj poniżej kodu ... Testowane i pracował

String dateStr = "Thu Jan 19 2012 01:00 PM"; 
    DateFormat readFormat = new SimpleDateFormat("EEE MMM dd yyyy hh:mm aaa"); 

    DateFormat writeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Date date = null; 
    try { 
     date = readFormat.parse(dateStr); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    String formattedDate = ""; 
    if(date != null) { 
    formattedDate = writeFormat.format(date); 
    } 

    System.out.println(formattedDate); 

Wyjście jest 2012-01-19 13:00:00

Cheers !!! Chętnie pomoże!!!

1

Jakie są Twoje domyślne ustawienia regionalne? Ponieważ ciąg data jest w języku angielskim, spróbuj parsowania go z lokalizacji w USA:

DateFormat format = new SimpleDateFormat("EEE MMM dd yyyy hh:mm a", Locale.US); 
+0

Próbowałem zarówno z Wielkiej Brytanii, jak i USA i oni pracują. – Andrey

+1

@Andrey Tak, ale domyślne ustawienia lokalizacji Jose Hdez prawdopodobnie nie są w USA lub Wielkiej Brytanii, więc pojawia się błąd, jeśli nie określa, które ustawienia regionalne mają być używane. – Jesper

0

Upewnij się, że wartość naprawdę się do tego wezwania. Umieść punkt przerwania bezpośrednio na tej linii i dwukrotnie sprawdź rzeczywistą wartość.

Jak widać tutaj kod http://ideone.com/MBzYn działa idealnie.

5

Spróbuj ustawić ustawienia regionalne, takie jak USA, w tym przypadku:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd yyyy hh:mm aaa",Locale.US); 
format.parse("Thu Jan 19 2012 08:00 PM"); 
Powiązane problemy