2016-04-19 24 views
1

Ich versuche, ein formatierte Datum zurück zu einem Date-Objekt zu analysieren, aber ich halte Ausnahmen stoßen, hier ist mein Code:Parsing Datum Zeichenfolge

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy ", Locale.ENGLISH); 
date = dateFormat.parse(dateString); 

Wenn ich ein Datum wie Apr 17, 2016 versuchen, es gibt mir ein ParserException zu sagen Unparseable date: "Apr 17, 2016" (at offset 12)

+0

u kann mit nur 3 Frau 'Simple versuchen ("MMM d, yyyy", Locale.ENGLISH)' –

+2

„MMMM "bedeutet" vollständiger Monatsname ", was" April "statt" Apr "bedeutet. Sie wollen "MMM", was "abgekürzter Monatsname" bedeutet. * Überprüfen Sie immer Ihr Format gegen die Dokumentation, wenn Sie Probleme wie diese haben. Beachten Sie auch, dass Sie in Ihrem Muster ein nachstehendes Leerzeichen haben, das Sie in Ihrem tatsächlichen Text nicht zu haben scheinen. –

Antwort

2

folgt Wenn Sie ein Datum Format-String liefern, alle Zeichen für den gesamten Text-Konto muss in die dateString irgendwie, einschließlich der literalen Leerzeichen.

Sie haben ein Leerzeichen am Ende des Formatstring:

"MMMM d, yyyy " 

diesen Raum beseitigen (oder ein Leerzeichen am Ende Ihres dateString string).

The format strings MMMM or MMM will parse Apr just fine.

Text: Für die Formatierung, wenn die Anzahl der Musterbuchstaben 4 oder mehr beträgt, die vollständige Form verwendet wird; Andernfalls wird eine Kurz- oder Kurzform verwendet, sofern verfügbar. Für das Parsen werden beide Formen akzeptiert, unabhängig von der Anzahl der Musterbuchstaben.

+0

der Platz war das Problem, vielen Dank. – Chrometobia

0

Versuchen als

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); 

Date date = dateFormat.parse(dateString); 
+0

Keine Erklärung und keine Änderungen an seinem Code. -1. –

+0

Hinzufügen "Datum" vor Datum –

+0

funktioniert nicht – Chrometobia

2

Sie haben ein wenig Bündler in Ihrer Datumsmaske: Der letzte leere ist zu viele:

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy ", Locale.ENGLISH); 

Es sollte:

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); 

Deshalb ist die Fehlerpunkte " Offset 12 ": Das DateFormat erwartet an dieser Stelle ein Leerzeichen.

1

Sie müssen den letzten leeren Platz im Zeichenfolgenformat entfernen.

Sie haben tatsächlich

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy ", Locale.ENGLISH); 

Und es sollte sein

DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);