Textfeld soll verschiedene Datumseingaben akzeptieren

Status
Nicht offen für weitere Antworten.

ak

Bekanntes 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
 
Eine Variante, die mir spontan einfällt; hat nur einen try-catch-Block:

Code:
String sDatePattern[] ... // hier die verschiedenen Pattern rein
boolean dateOK = false;
for ( int i 0; i < s.length; i++ ) {
try{
  SimpleDateFormat dateformate = new SimpleDateFormat();
  dateformate.applyPattern(sDatePattern[i]);
  dateformate.parse(textfeld.getText()); 
   dateOK = true;

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

P.S.: Gibt wahrscheinlich noch mehr richtige Lösungen für dein Problem.
 
Habe mein Problem so gelöst:

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;  
  }
 
*uralten thread ausgrab*
noch ne frage dazu:

gibt es eine möglichkeit, jegliche patterns zu akzeptieren bzw irgendwie ein regex-simpledateformat, ohne x patterns zu kreieren?
 
wie sollte das denn funktionieren?
ein Computer kann nicht von alleine denken, der muss schon nacheinander alle Pattern durchgehen und irgendwo vorher erfahren, welche Pattern zu durchlaufen sind,

wäre vielleicht nett, wenn es eine Operation mit einer entsprechenden Auflistung + bisschen Login schon gibt,
aber da kann man sie doch gleich selber aufzählen 😉
 
ja, klar, aber wenn man z.b. folgende Strings hat:

20.06.2006
20-06-2006

dann wärs doch praktisch, wenn man ein SimpleDateFormat machen könnte, das statt zwei Patterns nur eines benutzt, nämlich
Code:
"\\w{2}\\W*\\w{2}\\W*\\w{4}"
dann müsste man noch gruppen bilden und jeweils dem tag/monat/jahr zuweisen, dann gehts.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben