Ungültiges Datum wird nicht erkannt ??

MiMa

Top Contributor
Aktuell überprüfe ich meine Methode um ungültige Datumsangaben zu finden und das Wort "ungültig" zu zuweisen.
Das ungültige Prüfdatum ohne Uhrzeit als String ist : 30.02.2022 (dd.MM.yyyy)

Das Problem tritt beim Parsen des Datums im Abschnitt Echtheitsprüfung auf.
Ich habe schon Stunden mit verschiedenen SimpleDateFormat probiert und auch geprüft, aber das Problem kann ich
einfach nicht finden?!?

Seltsam finde ich schon daß sich das Datum vom 30.02.2022 zu 02.03.2022 ändert?

Über Hilfe bin ich sehr Dankbar.

Code-Auszug
Java:
// Datum mit Uhrzeit zusammensetzen
        if (datumHatUhrzeit == false) {
            LOG.info("Datum OHNE Uhrzeit : " + datum);
            formatPruefung = new SimpleDateFormat("dd.MM.yyyy");
            // TODO Scheinbar ein Problem mit dem Formatierer zu sein
        } else {
            datum = tag + "." + monat + "." + jahr + " " + uhrZeit;
            LOG.info("Datum zusammensetzen MIT Uhrzeit : " + datum);
            formatPruefung = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
            // TODO Scheinbar ein Problem mit dem Formatierer zu sein
        }  // Datum zusammensetzen

        // Datum Echtheitsprüfung
        try {
            LOG.info("Das zu prüfende Datum ist : " + datum);
            // Umschalten von korrigierenden auf striktes parsen
            formatPruefung.setLenient(true);
            // parst den String auf die Datumsvorlage (parser)
             datumObjekt = formatPruefung.parse(datum);
            LOG.info("Datums Objekt : " + datumObjekt);
            // schreibt das geparste Datum mit dem neuen Datumsformat in ausgabeDatum
            datum = formatPruefung.format(datumObjekt);
            LOG.info("Datum nach Prüfung : " + datum);
        } catch (Exception e) {
            // Wenn das Datum nicht gültig ist
            datum = "ungültig";
            LOG.info("Das Datum ist : " + datum);
        } // Datum Echtheitsprüfung

Logfile-Auszug
Code:
Das zu überprüfende Datum     : 30.02.2022
Das Datum enthält KEINE Uhrzeit
Das Trennzeichen ist '.' 30.02.2022
Das datumArray hat 3 Inhalte
Erkannter Tag   : 30
Erkannter Monat : 02
Erkanntes Jahr  : 2022
Das Datum besitzt '10' Stellen : 30.02.2022
Die Jahreszahl besitzt '4' Stellen : 2022
Datum OHNE Uhrzeit : 30.02.2022
Das zu prüfende Datum ist : 30.02.2022
Datums Objekt : Wed Mar 02 00:00:00 CET 2022
Datum nach Prüfung : 02.03.2022
 
Du solltest explizit setLenient(false) auf dem Datums-Parser aufrufen.
Folgendes gibt korrekt eine Exception:
Java:
SimpleDateFormat f = new SimpleDateFormat("dd.MM.yyyy");
f.setLenient(false);
f.parse("30.02.2022");
 
Ich bin mir sehr sicher dass lenient Standardmaeszig auf false steht, also es nicht zu setzen waere schon eine Loesung.
Falsch. Bei mir war es standardmäßig true. Deswegen musste ich es setzen. Ich habe das natürlich ausprobiert (ohne es zu setzen), bevor ich den Code gepostet hatte.

Siehe auch: https://docs.oracle.com/javase/6/do...se(java.lang.String, java.text.ParsePosition)
By default, parsing is lenient
 

Zurück
Oben