# Daten vergleichen mit GregorianCalendar - HILFE! :)



## Moerzel (22. Aug 2009)

Hi all,

ich bin neu hier, blutiger Anfänger in der objektorientierten Java-Programmierung und hoffe ihr könnt mir helfen. 

Zur Aufgabenstellung: über die Klasse Termin2UI sollen mittels einer existierenden JAVA-Klasse (GregorianCalendar) 2 Daten-Objekte in der Klasse Termin2 erstellt, anschließend ausgegeben und verglichen werden.

Ich denke ich habe es auch soweit hinbekommen, allerdings klappt das Vergleichen noch nicht. 

Bitte helft mir, vielen Dank im Voraus! :toll:

Noch eine Zusatzfrage: Wenn ich ein Datum mit "12" als Monat initialisiere, wird bei der Ausgabe "0" als Monat ausgeben. Warum ist das so?


----------------------------------------------------
Klasse Termin2UI
----------------------------------------------------

```
public class Termin2UI 
{
 public static void main(String arg[]) 
 {
     Termin2 geburtstagHans = new Termin2(1984, 11, 15 );
     Termin2 meinGeburtstag = new Termin2(1987, 9, 30);
     
     System.out.println ("----------------------------------------------------------");
     System.out.println (   "Mein Geburtstag ist am "
                            +meinGeburtstag.getTag()+"."
                            +meinGeburtstag.getMonat()+"."
                            +meinGeburtstag.getJahr());
     System.out.println (   "Der Geburtstag von Hans ist am "
                            +geburtstagHans.getTag()+"."
                            +geburtstagHans.getMonat()+"."
                            +geburtstagHans.getJahr());
     System.out.println ();
     if ( meinGeburtstag.istBevor(geburtstagHans))
     {
        System.out.println ("Das bedeutet, dass ich älter bin als Hans."); 
     }
     else
     {
         if (meinGeburtstag.istNach(geburtstagHans))
         {
             System.out.println ("Das bedeutet, dass Hans älter ist als ich."); 
         }
         else
         {
             System.out.println ("Das bedeutet, dass Hans und ich gleich alt sind."); 
         }
     }
     System.out.println ("----------------------------------------------------------");
 }
}
```
----------------------------------------------------
Klasse Termin2
----------------------------------------------------


```
import java.util.GregorianCalendar;

public class Termin2 
{

private GregorianCalendar datum;

public Termin2(int jahr, int monat, int tag) 
{
 datum = new GregorianCalendar (jahr, monat, tag);
}

public int getJahr()
{
 return datum.get(GregorianCalendar.YEAR);
}

public int getMonat()
{
 return datum.get(GregorianCalendar.MONTH);
}

public int getTag()
{
 return datum.get(GregorianCalendar.DATE);
}

public boolean istBevor(Termin2 termin) 
{
 return datum.before(termin);
}

public boolean istNach(Termin2 termin) 
{
 return datum.after(termin);
}

}
```
----------------------------------------------------
Ausgabe
----------------------------------------------------

```
----------------------------------------------------------
Mein Geburtstag ist am 30.9.1987
Der Geburtstag von Hans ist am 15.11.1984

Das bedeutet, dass Hans und ich gleich alt sind.
----------------------------------------------------------
```

Viele Grüße
Moerzel


----------



## SlaterB (22. Aug 2009)

die Monate müssen als 0-11 übergeben werden, 12 entspricht der 0 = Januar,

zum Zeitvergleich verwendest du
Calendar.before(Termin);

die Calendar-Klasse kann aber mit deiner Termin-Klasse nix anfangen, liefert daher anscheinend false,
vergleiche die Calendar-Objekte oder implementiere eigene Methoden, die sich Jahr, Monat und Tag einzeln anschauen


----------



## Moerzel (22. Aug 2009)

Hi SlaterB, vielen Dank für die schnelle Antwort.

Also gebe ich für Monat September eine 8 ein, bei der Ausgabe MONTH +1 ? Ebenso bei Dezember. Das klingt plausibel 

Bezüglich des Vergleichen der einzelnen Jahre, Monate und Tage: 

Das hatte ich mir auch schon überlegt, denke das bekomme ich auch hin, aber es erscheint mir irgendwie zu komplex bzw. kompliziert. Ich dachte ich kann die Funktionen von GregorianCalendar in meiner Termin2 oder auch jeder anderen Klasse nutzen ;(

Gruß
Moerzel

EDIT: Das mit dem Monat habe ich gefixt, vielen Dank! Muss man auch erstmal wissen, dann ist es logisch


----------



## sliwalker (22. Aug 2009)

Wie SlaterB schon sagte, brauchst Du in der Klasse Termin eigene Methoden zum Vergleichen.
Die hast Du ja. Aber darin verwendest Du Methoden von Calendar. Die erwarten zwar ein Objekt vom Typ Objekt, aber ist klar, dass das Objekt schon gewissen Richtlinien entsprechen muss, damit man damit vergleiche anstellen kann.

Hol Dir in den Methoden die Werte ran die Du aus dem aktuellen Objekt (also this) brauchst und vergleiche sie mit dengleichen Werten aus dem übergebenen Termin Objekt. Gib je nach Fall true/false zurück.

Oder:
Sorg dafür, das man aus einem Termin-Objekt das Date-Objekt auslesen kann...dann kannst Du es Dir vom übergebenen Termin-Objekt holen und der Calendar-Methode übergeben.


----------

