# Datumseingabe überprüfen



## JavaUncle (8. April 2008)

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".


```
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


----------



## Matze (8. April 2008)

Benutz doch mal die Forensuche. Dieses Thema wurde schon des öfteren abgehandelt. BSP: http://www.tutorials.de/forum/java/171245-vollst-ndige-datumspr-fung.html
http://www.tutorials.de/forum/java/309120-datum-pr-fen.html
http://www.tutorials.de/forum/java/305141-string-date-umwandeln.html


----------



## JavaUncle (8. April 2008)

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

Aber leider wird damit kein valides Datum sicher gestellt.


```
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


----------



## zeja (8. April 2008)

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.


----------



## robgeb (9. April 2008)

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


```
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
dateFormat.setLenient(false);
dateFormat.parse(date);
```


----------

