SimpleDateFormat Wochentag Monat

af99

Mitglied
Hallo Zusammen,

ich bin neu hier und möchte mich im Voraus schon mal für Eure Hilfe bedanken.
Das Problem ist das ich ein Datum mit dem Wochentag und dem Monatsnamen nicht parsen kann.
Java:
package Datum;

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

public class Datum_zerlegen {

    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss 'CEST' yyyy");
    
        String datum = "Mon Jan 13 12:40:04 CEST 2022";
        
        try {
            Date d = sdf.parse(datum);
            System.out.println("Datum: " + d);
            
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

Ich bekomme vom Eclipse immer die Meldung
"java.text.ParseException: Unparseable date: "Mon Jan 13 12:40:04 CEST 2022"
at java.base/java.text.DateFormat.parse(DateFormat.java:396)
at Datum.Datum_zerlegen.main(Datum_zerlegen.java:15)"

Wenn ich aber SimpleDateFormat sdf = new SimpleDateFormat("dd HH:mm:ss 'CEST' yyyy"); und String datum = "13 12:40:04 CEST 2022"; nehme dann klappts.

Was mache ich falsch?

Gruß Andreas
 
Als Gegenprobe kannst du in solchen Faellen dir immer ein Datum formatieren lassen:

Java:
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss 'CEST' yyyy");
        
System.out.println(sdf.format(new Date()));

Ergibt:

Code:
Mi Mär 09 11:19:58 CEST 2022

Und wir sehen, das Locale fuer Deutschland verwendet nur zweistellige Tagenamen fuer EEE. Als simple Loesung muesste es gehen einfach EEEE zu verwenden, oder du leitest dir eine Locale ab welche dreistellige Tagesnamen verwendet.

Ich glaube es gibt noch eine Loesung, die faellt mir aber gerade nicht ein.
 
Java:
new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US)
        .parse("Mon Jan 10 12:10:05 CEST 2022")
funktioniert.
 
Java:
new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US)
        .parse("Mon Jan 10 12:10:05 CEST 2022")
funktioniert.

Durch Zufall, weil "Mon" und "Jan" sich mit den englischen Bezeichnungen decken und das englische Locale dreistellige Tagesnamen verwendet. Also angenommen das Datum soll Deutsch sein.
 
Hallo Robert und mihe7,

super vielen Dank. hat geklappt. Das ist meine Lösung , Locale.US

@Robert Das Datum einfach nochmal auszugeben ist eine gute Idee. Heisst Dein "durch Zufall" das es bei anderen Monaten oder Tagen nicht klappen könnte?
 
nee ich bekomme das Datum immer in diesem Format "Mon Jan 10 12:10:05 CEST 2022" also mit englischer Bezeichnung für den Wochentag und den Monat geliefert.
 
Durch Zufall, weil "Mon" und "Jan" sich mit den englischen Bezeichnungen decken und das englische Locale dreistellige Tagesnamen verwendet. Also angenommen das Datum soll Deutsch sein.
Naja, was heißt Zufall? CEST ist Englisch, EEE auf Deutsch führt ja zu Mi. und nicht zu Mit usw. -> ich sehe hier ein englisch geschriebenes Datum.
 
Mal eine dumme Frage: CEST steht für "Central European Summer Time" - irgend etwas muss ich da übersehen. Wie kommt ihr auf Locale.US? Was ist da der Zusammenhang?
 
Naja, was heißt Zufall? CEST ist Englisch, EEE auf Deutsch führt ja zu Mi. und nicht zu Mit usw. -> ich sehe hier ein englisch geschriebenes Datum.

Mein Gedankengang war das ich nicht weisz woher das Datum kommt, vermutlich eher aus einer externen Quelle wie einer Datei, und ich war mir nicht sicher ob "CEST" lokalisiert wird oder nicht.
 
Mal eine dumme Frage: CEST steht für "Central European Summer Time" - irgend etwas muss ich da übersehen. Wie kommt ihr auf Locale.US? Was ist da der Zusammenhang?
Ja, das dürfte in GB genauso heißen 🙂 Keine Ahnung, ob es zwischen US und GB hier noch Unterschiede gibt (Abkürzung der Wochentage evtl.) Ich wäre jetzt davon ausgegangen, dass es in der DE-Locale MESZ heißen müsste.
 

Zurück
Oben