Denkfehler bei Datumsberechnung



  • Hallo,

    bis zum Jahr 1599 waren alle Jahre, die durch vier glatt teilbar waren Schaltjahre.
    Ab 1600 sind alle Jahre Schaltjahre, die durch vier glatt teilbar sind, außer den vollen Jahrhundertjahren (die, die durch 100 glatt teilbar sind), es sei denn, sie sind glatt durch 400 teilbar.

    Ich versuche mich gerade an einem kleinem Programm, was mir die Anzahl der Tage ab dem 01.01.0001 zählt und den korrekten Wochentag ausgibt. Für ein Datum < 1600 klappt das auch, aber leider stimmt es ab dem 01.01.1600 leider nicht mehr und ich weiß nicht genau warum.

    Kleines Codebeispiel zum besseren Verständnis:

    // Gregorianischer Kalender ab 1600
    		else {
    			anzSchaltjahrTage = year / 4;
    			anzSchaltjahrTage -= year / 100;
    			anzSchaltjahrTage += year / 400;
    			// anzTageAbAnfang meint die Tage ab 01.01.0001
    			anzTageAbAnfang += (year - 1) * 365;
    			// anzMonatsTage addiert die Tage der bereits verstrichenen Monate auf (0,31,59 ...)
    			anzTageAbAnfang += anzMonatsTage;
    			if (year % 4 == 0 && month >= 2) {
    				anzTageAbAnfang += anzSchaltjahrTage;
    			} else if (year % 4 == 0 && month < 2) {
    				anzTageAbAnfang += anzSchaltjahrTage - 1;
    			} else {
    				anzTageAbAnfang += anzSchaltjahrTage;
    			}
    			anzTageAbAnfang += day;
    			System.out.print("Die Anzahl der Tage ab 01.01.0001 beträgt: "
    					+ anzTageAbAnfang + " und der Wochentag war ein: ");
    
    			int Wochentag = (anzTageAbAnfang + 4) % 7;
    			System.out.print(weekdays[Wochentag]);
    
    		}
    

    Weiß jemand, was ich falsch mache?

    Vielen Dank schonmal


Log in to reply