# auf Valides Datum prüfen



## Thomas_d200 (2. Okt 2012)

Hallo Leute, 

hab mir mal mit Expressions versucht, das ein Datum auf seine Validität prüft.
Bei mir kommt das Datum so daher: 2012-10-02

Hab hierfür dieses Teil gebastelt:


```
String expression = "^(19|20)\\d{2}[-/]?[0-1][1-9][-/]?(0[1-9]|[12][0-9]|3[01])$"; 
CharSequence inputStr = s1.substring(0,8); //Hier steckt mein Datum  
Pattern pattern = Pattern.compile(expression,Pattern.CASE_INSENSITIVE);  
Matcher matcher = pattern.matcher(inputStr);  
if(matcher.matches()){  
       isValid = true;  
}
```

ich ruf das ganze über ne jsp auf, jedoch nicht immer liefert dies ein valides Datum. Weiß wer warum oder was ich falsch mach bzw stimmt meine Expression-syntax?

LG


----------



## Gast2 (2. Okt 2012)

```
CharSequence inputStr = s1.substring(0,8);
```
Dein Beispieldatum oben hat 10 Stellen.


----------



## Thomas_d200 (2. Okt 2012)

oh sorry, mein Datum kommt natürlich so daher: 20121002


----------



## ssoul26 (2. Okt 2012)

Muss es Regex sein?


----------



## Thomas_d200 (2. Okt 2012)

Nee muss nicht regex sein, habs halt mal so mit dem Teil umgesetzt 
Für andre Lösungswege (die nicht gerade 50 zeilen code enhalten) wäre ich sehr dankbar.


----------



## ssoul26 (2. Okt 2012)

Dein Datum kommt ja so an 20121002 als String. Teile es in die relevanten Bereiche und überprüfen den int-Wert:


```
private boolean checkDate(String sDate){
      boolean ok=true;
      int y= Integer.parseInt(sDate.substring(0,4));
      int m= Integer.parseInt(sDate.substring(4,6));
      int d= Integer.parseInt(sDate.substring(6));
      if ((y>2099 || y<1700)||(m<=0 || m>12)||(d<=0||d>31)){
         return false;
      }
      return ok;
   }
```


----------



## TryToHelp (2. Okt 2012)

warum verwendest du nicht die Kalender funktion (die calender klasse), da kannst du auch schauen ob es den Tag wirklich gibt (nicht jeder Monat hat 31 Tage (nur mal so als info))


----------



## TryToHelp (2. Okt 2012)

bzw SimpleDateFormat klasse siehe als Beispiel


----------



## Thomas_d200 (2. Okt 2012)

Danke für die rasche Antwort ssoul26, jedoch prüft dein if natürlich nicht ab, zB.: auf den 30.02.2012 oder 31.04.2012 .. iwie muss hier noch auf Schaltjahre bzw auf 30 bzw 31 kalendertage zu den jeweiligen Monaten geprüft werden.. geht das nur mit der Calender Funktion??


----------



## ssoul26 (2. Okt 2012)

Diesmal mit SimpleDateFormat, obs 100 pro klappt musst testen Müsste auch irgendwo im iNet ähnlicher Code sein.

```
private boolean checkDate(String sDate) {
      String sDatumFormat= "yyyyMMdd";
      try {
         SimpleDateFormat sdf= new SimpleDateFormat(sDatumFormat);
         format.setLenient(false);
         format.parse(input);
      } catch (ParseException e) {
         return false;
      } catch (IllegalArgumentException e) {
         return false;
      }
      return true;
   }
```


----------



## TryToHelp (2. Okt 2012)

Ja ssoul26 dein code ähnelt dem, was ich in meinem Beispiel hier auch Verlinkt hatte ;-)



TryToHelp hat gesagt.:


> bzw SimpleDateFormat klasse siehe als Beispiel


----------



## ssoul26 (2. Okt 2012)

TryToHelp hat gesagt.:


> Ja ssoul26 dein code ähnelt dem, was ich in meinem Beispiel hier auch Verlinkt hatte ;-)



Ahhhhh dmn Sorry hab ich nicht angeguckt!


----------



## Thomas_d200 (2. Okt 2012)

Danke Leutz, klappt soweit sehr gut ... 
oftmals ist die kompliziertere Lösung (wie bei mir) nicht immer zielführend ;o)

schönen abend


----------

