Textfeld soll verschiedene Datumsformate akzeptieren

AKST

Erfahrenes Mitglied
Hallo,

ich habe ein Programm in dem der Benutzer sein Geburtsdatum angeben soll.

Jetzt möchte ich dem Benutzer die Möglichkeit geben dass er das Datum entweder

so: 11.11.1999
oder so: 11. 11. 1999 (mit Leerzeichen nach dem Punkt)
oder so: 11-11-1999 eingeben kann.
Andere Formate sollen nicht akzeptiert werden.

Wenn ich mit SimpleDateformat und applyPattern arbeite, dann das Datum parse und mit einem try catch Block arbeite, dann kann ich leider nur ein Format prüfen. Es sollen aber drei Formate akzeptiert werden. Hier mal mein code:

Code:
try{
  SimpleDateFormat dateformate = new SimpleDateFormat();
  dateformate.applyPattern("dd. MM. yyyy");
  dateformate.parse(textfeld.getText());  

}catch (ParseException e) {
    //Wenn im entsprechenden Textfeld kein gültiges Datum steht....
    JOptionPane.showMessageDialog(null, "Geben Sie bitte ein gültiges Datum ein!");
 }

Wie würdet ihr das machen?


Gruß

P.S. mit mehreren verschachtelten try catch-Blöcken wollte ich eigentlich nicht arbeiten
 
Original geschrieben von AKST
Hallo,

ich habe ein Programm in dem der Benutzer sein Geburtsdatum angeben soll.

Jetzt möchte ich dem Benutzer die Möglichkeit geben dass er das Datum entweder

so: 11.11.1999
oder so: 11. 11. 1999 (mit Leerzeichen nach dem Punkt)
oder so: 11-11-1999 eingeben kann.
Andere Formate sollen nicht akzeptiert werden.

Die ersten beiden lassen sich doch zusammen überprüfen, indem Du den Text per trim() manipulierst, dann wird aus 11. 11. 1999 nämlich
11.11.1999. ;)

Wie würdet ihr das machen?

Gruß

P.S. mit mehreren verschachtelten try catch-Blöcken wollte ich eigentlich nicht arbeiten

Zwei try-catch-Blöcke hintereinander, nicht ineinander verschachteln.
 
Hallo,

es gibt sicherlich keine Musterlösung, aber wie wäre es damit:
Code:
    private final static SimpleDateFormat[] formats = new SimpleDateFormat[3];
    static  {
        formats[0] = new SimpleDateFormat("dd.MM.yyyy");
        formats[1] = new SimpleDateFormat("dd. MM. yyyy");
        formats[2] = new SimpleDateFormat("dd-MM-yyyy");
    }
    
    private static Date parseDate(String dateString)  {
        Date date = null;
        for (int i = 0; i < formats.length; i++)  {
            try {
                date = formats[i].parse(dateString);
                break;
            } catch (ParseException e)  {
                // try next format
            }
        }
        
        return date;        
    }
Die Methode liefert ein Date Objekt, wenn der übergebene String mit einem der Formate geparst werden konnte, wenn nicht - eine null.
 
Die Lösung von Vincentius gefällt mir sehr gut:
Code:
public static Date pruefDatum(String str_datum){
    
    final SimpleDateFormat[] formate = new SimpleDateFormat[3]; 
    Date d_datum=null;
    
    formate[0]=new SimpleDateFormat("dd.MM.yyyy");
    formate[1]=new SimpleDateFormat("dd. MM. yyyy");
    formate[2]=new SimpleDateFormat("dd-MM-yyyy");
    
    for(int i=0; i<=2; i++){
      
      try {
        d_datum=formate[i].parse(str_datum);
        break;
      } catch (ParseException e) {
        // try next format
      }
      
    }
    
    return d_datum;  
  }
 
Zurück