auf Valides Datum prüfen

  1. #1
    Thomas_d200

    auf Valides Datum prüfen
    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:

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


    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

  2. #2
    Gast2

    Java Code:
    1. CharSequence inputStr = s1.substring(0,8);

    Dein Beispieldatum oben hat 10 Stellen.

  3. #3
    Thomas_d200

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

  4. #4
    ssoul26


    Muss es Regex sein?

  5. #5
    Thomas_d200

    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.

  6. #6
    ssoul26


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

    Java Code:
    1.  
    2. private boolean checkDate(String sDate){
    3. boolean ok=true;
    4. int y= Integer.parseInt(sDate.substring(0,4));
    5. int m= Integer.parseInt(sDate.substring(4,6));
    6. int d= Integer.parseInt(sDate.substring(6));
    7. if ((y>2099 || y<1700)||(m<=0 || m>12)||(d<=0||d>31)){
    8. return false;
    9. }
    10. return ok;
    11. }

  7. #7
    TryToHelp

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

  8. #8
    TryToHelp

    bzw SimpleDateFormat klasse siehe als Beispiel

  9. #9
    Thomas_d200

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

  10. #10
    ssoul26


    Diesmal mit SimpleDateFormat, obs 100 pro klappt musst testen Müsste auch irgendwo im iNet ähnlicher Code sein.
    Java Code:
    1.  
    2. private boolean checkDate(String sDate) {
    3. String sDatumFormat= "yyyyMMdd";
    4. try {
    5. SimpleDateFormat sdf= new SimpleDateFormat(sDatumFormat);
    6. format.setLenient(false);
    7. format.parse(input);
    8. } catch (ParseException e) {
    9. return false;
    10. return false;
    11. }
    12. return true;
    13. }

  11. #11
    TryToHelp

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

    Zitat Zitat von TryToHelp Beitrag anzeigen
    bzw SimpleDateFormat klasse siehe als Beispiel

  12. #12
    ssoul26


    Zitat Zitat von TryToHelp Beitrag anzeigen
    Ja ssoul26 dein code ähnelt dem, was ich in meinem Beispiel hier auch Verlinkt hatte
    Ahhhhh dmn Sorry hab ich nicht angeguckt!

  13. #13
    Thomas_d200

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

    schönen abend


Keine Antwort auf Deine Suche gefunden? Registriere Dich kostenlos und stelle Deine eigene Frage zu Java!

Jetzt kostenlos registrieren