Wie überprüfe ich die Gültigkeit der Datumszeichenfolge?

In meinem Projekt muss ich überprüfen, ob eine Datumszeichenfolge ein geeignetes Datumsobjekt ergibt. Ich habe beschlossen, JJJJ-MM-TT und Datumsformate [(Jahr, Monat, Datum) und (Jahr, Monat, Datum, Std., Min.)] Zuzulassen. Wie kann ich überprüfen, ob sie gültig sind? Mein Code gibt null für "1980-01-01" und einige seltsame Daten (wie 3837.05.01) zurück, die eine durch Kommas getrennte Zeichenfolge angeben:

private Date parseDate(String date){
    Date data = null;

    // yyy-mm-dd
    try {
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
        df.setLenient(false);
        df.parse(date);
        return data;
    }
    catch (Exception e) {
        try{
            int[] datArr = parseStringForDate(date);
            int len = datArr.length;
            // year, month, day
            if(len == 3){
                return new Date(datArr[0], datArr[1], datArr[2]);
            }
            // year, montd, day, hours, mins
            else if(len ==5){
                return new Date(datArr[0], datArr[1], datArr[2], datArr[3], datArr[4]);
            }
            // year, month, day, hours, mins, secs
            else if(len == 6){
                return new Date(datArr[0], datArr[1], datArr[2], datArr[3], datArr[4], datArr[5]);
            }
            else {
                return data;
            }
        }
        catch (Exception f){
            return data;
        }
    }
}

private int[] parseStringForDate(String s){
    String[] sArr = s.split(",");
    int[] dateArr = new int[sArr.length];

    for(int i=0; i< dateArr.length; i++){
        dateArr[i] = Integer.parseInt(sArr[i]);
    }

    return dateArr;
}

Ich erinnere mich, dass ich 1900 vom Datum des Jahres subtrahieren musste, aber ich sehe auch, dass der Monat anders ist, usw., und ich möchte vermeiden, jedes Element meines Ints-Arrays von der Datumszeichenfolge zu überprüfen. Ist es möglich, sie automatisch im Kalender oder im Datumsobjekt zu analysieren?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage