# Zeit+Datum vergleichen



## andiS (19. Jan 2007)

Hallo,

möchte in meiner Webanwendung (Struts) Felder mit Startdatum+Endatum und Startzeit+Endzeit validieren. Natürlich darf der Endzeitpunkt nicht vor dem Startzeitpunkt liegen. Folgendes habe ich probiert:


```
//dateformat to check the date
    private static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    
    //test if string is null or empty
    protected boolean nullOrBlank (String str) {
        return ((str == null) || (str.length() < 1));
    }
    
    // compare date
    protected int compareDate(Date dateDep, Date dateArr) {
        int result = dateDep.compareTo(dateArr);
        return result;
    }
    
    //compare time
    protected int compareTime() {
        int arr; //Ende
        int dep; //Start
        dep = Integer.parseInt(deptime+":00");
        arr = Integer.parseInt(arrtime+":00");
        if (dep >= arr) {
            return 1;
        }
        return 0;
    }

 public ActionErrors validate( 
      ActionMapping mapping, HttpServletRequest request ) {
      ActionErrors errors = new ActionErrors();
       .....

//Hier der eigentliche Check: ++++++++++++++++++++++++++++
//test date of lower arrdate / lower arrtime
      try {
          if(!nullOrBlank(depdate) && !nullOrBlank(arrdate) && (df.parse(depdate)!=null)
                  && (df.parse(arrdate)!=null) && !nullOrBlank(deptime) && !nullOrBlank(arrtime)
                  && Time.valueOf(deptime+":00")!=null && Time.valueOf(arrtime+":00")!=null)
          {
              int result = compareDate(df.parse(depdate), df.parse(arrdate));
              if(result > 0) 
              {
                    errors.add("lowerDate",new ActionMessage("error.arrdate.lower"));
              }
              if(result == 0) 
              {
                    result = compareTime();  
                    if(result == 1)  {
                        errors.add("lowerTime",new ActionMessage("error.arrtime.lower"));
                    }
              }
          }
      } catch (Exception e){ 
         e.printStackTrace();
         //errors.add("err",new ActionMessage("error.parse.date.time"));
      }
```

Leider funktioniert der Check nur mit dem Datumsfeldern. Kann jemand einen Fehler erkennen? Wäre für jede Hilfe dankbar, eventuell kennt jemand auch Links zu Datum + Zeitvergleich.

Danke+Gruß

Andi


----------



## Wyvern (19. Jan 2007)

Also so als Schnellschuß frag ich mich, warum Du nicht zB 

```
SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
```
machst, und dann einfach so vergleichst? 

Oder noch einfacher: Vergleiche depdate mit arrdate. Die beiden werden intern als Zahl dargestellt. Wenn eine kleiner als die andere ist, dann ist sie einfach früher. 

Oder versteh ich was falsch?


----------



## L-ectron-X (19. Jan 2007)

In der Klasse Date gibts bereits eine compareTo()-Methode, die braucht nur noch angewendet zu werden, dann kannst du dir einen Großteil des Codes sparen.


----------



## andiS (19. Jan 2007)

Danke für die Hilfe.


```
SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
```

Die Idee war gut!

Warum einfach, wenns auch kompliziert geht ???:L :wink: 

Danke+Gruß 
Andi


----------

