Zeit+Datum vergleichen

  • Themenstarter Themenstarter andiS
  • Beginndatum Beginndatum
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
 
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?
 
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.
 
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.

Neue Themen


Zurück
Oben