Zeit+Datum vergleichen

Status
Nicht offen für weitere Antworten.
A

andiS

Gast
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:

Code:
//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

Mitglied
Also so als Schnellschuß frag ich mich, warum Du nicht zB
Code:
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

Gesperrter Benutzer
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.
 
A

andiS

Gast
Danke für die Hilfe.

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

Die Idee war gut!

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

Danke+Gruß
Andi
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben