Hallo!
Ich muss ein Programm mit Kalenderfunktionen schreiben. Ich habe folgendes Problem:
Ich möchte überprüfen ob das eingegebene Datum auch gültig ist.
Mein Codefragment welches dies bewerkstelligen soll sieht wie folgt aus:
Also die erste if-Abfrage kümmmert sich um den Zeitraum vom 5.10.1582 bis 14.10.1582, da diese ja gestrichen wurden um die Schalttage bei der Umstellung vom julianischen auf den gregorianischen Kalender abzubauen.
Die Methode isGregorian stellt fest ob ich mich im jul. oder greg. Kalender befinde.
Der gregorianische soll bei mir ab 1.10.1582 gelten.
Die Methode isLeapYear soll zeigen ob ich ein Schaltjahr habe oder nicht. Schaltjahre sollen im jul. Kalender jedes 4te sein (Jahr 1 nicht) und im greg. Kalender soll jedes durch 4 teilbare aber nicht durch 100 teilbare soll ein Schaltjahr sein oder jedes durch 400 teilbare soll ein Schaltjahr sein.
Bei meinen Testläufen habe ich aber immer wieder ein oder mehrere Datum dabei bei denen meine Methode isValidDate falsch läuft. Ich habe die Fehlerquelle schon etwas eingekreist und glaube der Hund liegt in den letzten beiden if-Abfragen begraben. Ich peils einfach nicht mehr. Evtl seh ich den Wald vor lauter Bäumen nicht mehr...
Gibts eigentlich in Java eine "elegantere" Vorgehensweise um solche if-Abfragen zu "umgehen"?
Bin für jede Unterstützung dankbar!
Ich muss ein Programm mit Kalenderfunktionen schreiben. Ich habe folgendes Problem:
Ich möchte überprüfen ob das eingegebene Datum auch gültig ist.
Mein Codefragment welches dies bewerkstelligen soll sieht wie folgt aus:
Code:
boolean isValidDate(int day, int month, int year) {
// Müsste passen...
if ((year == 1582) && (month == 10)) {
if ((day == 5) || (day == 6) || (day == 7) || (day == 8)
|| (day == 9) || (day == 10) || (day == 11) || (day == 12)
|| (day == 13) || (day == 14)) {
return false;
}
}
// Müsste ebenfalls passen
if ((day < 1) || (month > 12) || (month < 1) || (year < 1)) {
return false;
}
// Überprüfung ob gegebenes Jahr Julianisch oder Gregorianisch ist
boolean greg = isGregorian(day, month, year);
// Überprüfen ob gegebenes Jahr ein Schaltejahr ist
boolean leap = isLeapYear(year, greg);
// Müsste auch passen
if (leap && (month == 2) && (day > 29)) {
return false;
}
// Hier ist glaub ich der Fehler drin...?
if ((month == 1) || (month == 3) || (month == 5) || (month == 7)
|| (month == 8) || (month == 10) || (month == 12) && day > 31) {
return false;
}
// Oder auch hier...?
if ((month == 4) || (month == 6) || (month == 9) || (month == 11)
&& day > 30) {
return false;
}
return true;
}
Also die erste if-Abfrage kümmmert sich um den Zeitraum vom 5.10.1582 bis 14.10.1582, da diese ja gestrichen wurden um die Schalttage bei der Umstellung vom julianischen auf den gregorianischen Kalender abzubauen.
Die Methode isGregorian stellt fest ob ich mich im jul. oder greg. Kalender befinde.
Der gregorianische soll bei mir ab 1.10.1582 gelten.
Die Methode isLeapYear soll zeigen ob ich ein Schaltjahr habe oder nicht. Schaltjahre sollen im jul. Kalender jedes 4te sein (Jahr 1 nicht) und im greg. Kalender soll jedes durch 4 teilbare aber nicht durch 100 teilbare soll ein Schaltjahr sein oder jedes durch 400 teilbare soll ein Schaltjahr sein.
Bei meinen Testläufen habe ich aber immer wieder ein oder mehrere Datum dabei bei denen meine Methode isValidDate falsch läuft. Ich habe die Fehlerquelle schon etwas eingekreist und glaube der Hund liegt in den letzten beiden if-Abfragen begraben. Ich peils einfach nicht mehr. Evtl seh ich den Wald vor lauter Bäumen nicht mehr...
Gibts eigentlich in Java eine "elegantere" Vorgehensweise um solche if-Abfragen zu "umgehen"?
Bin für jede Unterstützung dankbar!