Gültiges Datum in Java einlesen

Eigenlich kann es ja nicht so schwer sein, aber ich habe nur einmal versucht ein Gültiges vom Benutzer eingegebenes Datum einzulesen.
Grund dieses Versuches war eine Aufgabe in der Schule.

Es soll vom Benutzer Tag, Monat und Jahr eingegeben werden.
Das habe ich mit read auch alles soweit hinbekommen.
Die Variablen heißen Tag, Monat und Jahr. (liegt ja auch irgendwie nahe… :smile:)

Um die Jahr von Schaltjahren zu trennen habe ich folgende Formel verwendet:

if(jahr%4 == 0 && jahr%400 != 0 || jahr%100 == 0) {
fenster.println(„Dieses Jahr ist ein Schaltjahr!“);
}
else {
fenster.println(„Diese Jahr ist kein Schaltjahr!“);
}

auch damit kam ich bislang gut zurecht.
Nun zu meinem Problem.
Wenn der Monat gerade ist, also zum Beispiel der April, dann darf er nur 30 Tage haben.
Auf der anderen Seite darf der Monat nicht der Monat 2 sein, sonst hat er ja bekanntlich nur 28 Tage, ES SEI DENN, es ist ein Schaltjahr.
Und da ist mein Problem schon wieder.
Ich kann eine Abfrage starten, beide Voraussetzungen gleichzeitig prüfen will mir aber nicht so ganz gelingen.
Mein Versuch sah bislang so aus:

do {
tag = fenster.readInt("Der Tag bitte: ");
}
while(monat%2 == 0 || jahr%4 == 0 && jahr%400 != 0 || jahr%100 == 0);

Das es so nicht klappen kann ist mir schon klar, aber wie kann ich alle Möglichkeiten die für einen Tag in Frage kommen bei dem einlesen schon ausschließen?

Vielen Dank schon einmal für eure Hilfe…
MfG
Thomas

Hat sich schon erledigt…

Ich bin selber drauf gekommen…

Wenn der Monat gerade ist, also zum Beispiel der April, dann
darf er nur 30 Tage haben.

August, Oktober, Dezember?

Ich kann eine Abfrage starten, beide Voraussetzungen
gleichzeitig prüfen will mir aber nicht so ganz gelingen.

Mach ein Array, sagen wir mal TageImMonat mit

TageProMonat[0] = 31
TageProMonat[1] = 28 // Sonderfall
TagePromonat[2] = 31
TageProMonat[3] = 30
...

Die Abfrage ist dann relativ einfach (isLeap sei true wenn das Argument ein Schaltjahr ist, sonst false):

if( ( monat != 2 && tag 

Alternativ ohne das Array ginge natürlich auch


    
    if( ( monat == 1 && tag 

Hallo,

aber in Java macht man das ganz anders:

irgendeiner hat das schon für Dich erledigt und stellt die Klassen kostenlos ins Netz. Schau doch mal unter joda-time nach. Da sind brauchbare (einfache) Datumsklassen.

Gruß

Peter