Datumseingabe überprüfen

JavaUncle

Mitglied
Hallo

Ein User kann abhängig von der aktuell gewählten Sprache ein Datum in ein Formular eingeben. Das Format hängt von der jeweiligen Sprache ab.

Beispiel für Deutsch: dd.MM.yyyy
Beispiel für Englisch: yyyy-MM-dd

Das Date-Objekt erwartet lediglich den Input-String, also z.B. "22.12.2007"

Es soll geprüft werden, ob das angegebene Datum so wie es eingegeben wurde ein echtes, valides Datum ist. Es muss also im Kalender existieren.

Leider ist Java so schlau und macht aus einer Eingabe wie "78.12.2007" etwas wie "04.02.2008".

Code:
Date date=new Date(((Date)value).getTime());


mit SimpleDateFormat bin ich nicht weiter gekommen...

Hat hier schon mal jemand so eine Datumseingabe-Validierung gemacht?

JavaUncle
 
Danke für die Links, ich habe die Sachen mal ausprobiert.

Aber leider wird damit kein valides Datum sicher gestellt.

Code:
String lang_dateformat = "dd.MM.yyyy";
String value = "99.12.2008";

		try {
			SimpleDateFormat sdf = new SimpleDateFormat(lang_dateformat);
			Date d = sdf.parse(value);
			System.out.println("VERY GOOD DATE!");
		} catch (ParseException e) {
			System.out.println("VERY BAD DATE!");
			e.printStackTrace();
		}

// Es kommt "VERY GOOD DATE" dabei heraus...

witziger weise wird nämlich nur stellenweise geprüft, ob 2 int's für die Tage, 2 für die Monate und 4 für's Jahr angegeben wurden.

Meine Idee wäre jetzt, nach erfolgreicher Plausibilitätsprüfung einen Calendar zu schnappen und dem diese Werte einzutrichtern. Anschließend das generierte Date-Objekt in einen String konvertieren, welcher das gleiche Format hat wie bei der Eingabe erwartet. Die Strings vergleichen. Wenn nicht gleich, ist das Datum nicht valide.

Gute Idee?

JavaUncle
 
Parse doch den String in ein Date-Objekt und formatiere das Datum dann wieder in einen String. Sind die Strings gleich ist das Datum offenbar valide.
 
Hi, du hast in den Links ein kleines Detail übersehen.
Das Flag Lenient bestimmt ob der "Übertrag" umgerechnet werden soll.
Also:
Lenient = true => 32.03.2008 -> 01.04.2008
Lenient = false => 32.03.2008 -> ParseException

Java:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
dateFormat.setLenient(false);
dateFormat.parse(date);
 
Zurück