# Vergleichen von Datumswerten



## firestone (3. Feb 2011)

Hallo zusammen,

ich stehe glaube ich vollkommen auf dem Schlauch .

Also folgendes brauche ich 
1. Ich habe ein Datumsformat aus der Datenbank in form eines java.util.date
dann habe ich zwei Strings einmal das Datum und einmal die Uhrzeit. So jetzt muss ich daraus auch ein Datum machen und die zwei Datumswerte dann bis auf die Uhrzeit genau miteinander vergleichen. 

2. Ich habe Einen String für das Datum und eines für die Uhrzeit daraus muss ich jetzt ein Datum machen. Dann habe ich ein Datum von heute welches um um einen Wert x erhöhen muss also +1 wäre dann morgen +2 wäre dann übermorgen +5 wäre dann dementsprechend fünf Tage weiter. Die Zwei Datumswerte die ich dann habe muss ich auch wieder Uhrzeitgenau miteinander vergleichen können.

Ich hoffe ihr habt verstanden was ich brauche ich komme etwas durcheinander mit Date,Calendar,GregorianCalendar also das was ich aus der Datenbank lese ist auf jeden Fall ein date 


die etwas verwirrte Fireli


----------



## GladstoneGander (3. Feb 2011)

Zu 1: google - die Variablen kannst du ja mit String.format("%s %s", datumString, zeitString) verknüpfen.

Zum uhrzeitgenauen Vergleichen von Datumsobjekten (bis auf die Millisekunde herunter): Entweder mit "datum1.getTime() == datum2.getTime()" oder "datum1.equals(datum2)", was eigentlich das Gleiche macht.

Zum "rechnen" mit einem Datum nimmst du einen GregorianCalendar. Also

```
Calendar cal = GregorianCalendar.getInstance();
cal.setTime(deinDatum);
cal.add(Calendar.DATE, 1);
Date neuesDatum = cal.getTime();
```

verständlich?


----------



## Andi_CH (3. Feb 2011)

firestone hat gesagt.:


> 1. Ich habe ein Datumsformat aus der Datenbank in form eines java.util.date
> ...
> das was ich aus der Datenbank lese ist auf jeden Fall ein date



Äh - was liest du denn aus der Datenbank???



firestone hat gesagt.:


> etwas verwirrt


Ja, das kann ich von mir auch sagen ;-)


----------



## firestone (4. Feb 2011)

So also vielleicht ist es einfacher mit ein bißchen Code .

Also ich habe eine Klasse Zeitpunkt die wie folgt aussieht

```
public class Zeitpunkt implements Serializable {

    //~ Instance fields --------------------------

    private Date datum;
    private Date zeit;

    //~ Constructors -----------------------------

    /**
     * Default-Constructor
     */
    public Zeitpunkt() {
        this.datum = null;
        this.zeit = null;
    }


    /**
     * Constructor
     *
     * @param datum Datum
     * @param zeit  Uhrzeit
     */
    public Zeitpunkt(Date datum, Date zeit) {
        this.datum = datum;
        this.zeit = zeit;
    }

    //~ Methods ----------------------------------

    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(Object other) {
        if (null == other) {
            return false;
        }

        if (!(other instanceof Zeitpunkt)) {
            return false;
        }

        Zeitpunkt oz = (Zeitpunkt) other;

        if ((null == this.datum) && (null != oz.getDatum())) {
            return false;
        }

        if ((null == this.zeit) && (null != oz.getZeit())) {
            return false;
        }

        if (null != this.datum) {
            if (!this.datum.equals(oz.getDatum())) {
                return false;
            }
        }

        if (null != this.zeit) {
            if (!this.zeit.equals(oz.getZeit())) {
                return false;
            }
        }

        return true;
    }


    public Date getDatum() {
        return datum;
    }

    /**
     * Liefert das Datum und die Uhrzeit in einem Date.
     *
     * @return Date mit Tag, Monat, Jahr aus <code>datum</code> und Stunde, Minute, Sekunde,
     *         Millisekunde aus <code>zeit</code>. Falls einer der beiden Werte null sein sollte,
     *         wird der andere unverändert zurückgegeben. Falls beide null sind, wird auch null
     *         zurückgegeben.
     */
    public Calendar getDatumZeit() {
        // TODO Tests
        if ((this.datum == null) && (this.zeit == null)) {
            return null;
        }

        if (this.datum == null) {
            Calendar z = Calendar.getInstance();
            z.setTime(this.zeit);

            return z;
        }

        if (this.zeit == null) {
            Calendar d = Calendar.getInstance();
            d.setTime(this.datum);

            return d;
        }

        Calendar datumC = Calendar.getInstance();
        datumC.setTime(this.datum);

        Calendar zeitC = Calendar.getInstance();
        zeitC.setTime(this.zeit);

        // Daten aus datum in Zeit übernehmen
        zeitC.set(Calendar.YEAR, datumC.get(Calendar.YEAR));
        zeitC.set(Calendar.MONTH, datumC.get(Calendar.MONTH));
        zeitC.set(Calendar.DAY_OF_MONTH, datumC.get(Calendar.DAY_OF_MONTH));

        // kombiniertes Datum zurückgeben
        return zeitC;
    }

    public Date getZeit() {
        return zeit;
    }

    public void setDatum(Date date) {
        datum = date;
    }

    /**
     * Übernimmt das Datum und die Zeit aus dem übergebenen Calendar. Dabei wird der jeweils nicht
     * verwendete Bestandteil (Zeit in 'datum' und andersrum) unverändert übernommen.
     *
     * @param c Calendar mit Datum und Zeit.
     */
    public void setDatumZeit(Calendar c) {
        if (c == null) {
            this.datum = null;
            this.zeit = null;
        }

        this.datum = c.getTime();
        this.zeit = c.getTime();
    }

    public void setZeit(Date date) {
        zeit = date;
    }
}
[/JAVA ]

So die Daten aus der Datenbank lese ich wie folgt ein
[code=Java]
new Zeitpunkt(set.getDate("DATUM"), set.getTime("ZEIT"));
```

So das ist mein Vergleichswert aus der Datenbank 
Nun habe ich zwei Strings also z.B 06.02.2011 11:12:23 . Das erste ist das Datum das zweite die Zeit. Die muss ich jetzt so in ein Datum umwandeln und dann mit dem Was ich aus der Datenbank eingelesen habe vergleichen.

Gleichzeitung muss ich das Datum 06.02.2011 mit dem Datum heute +x vergleichen können . Der erste Vergleich muss Uhrzeit genau sein der zweite vergleich reicht wenn ich weiss ob das Datum 06.02.2011 vor oder gleich dem Datum heute +x ist.

Ich hoffe das ist etwas verständlicher wo mein Problem liegt. Die Klasse Zeitpunkt habe ich so übernommen. 

Lg Fireli


----------

