Alle Jahre wieder – Datumsprobleme beim Programmieren

Es hätte so schön sein können. Da kommt man im neuen Jahr in das noch spärlich besetzte Büro und will in Frieden arbeiten. Und dann das: Ein Test crasht, weil das Osterdatum nicht richtig berechnet werden kann. Super…

Hier das Snippet nach der Korrektur:


int g = year % 19; // Golden number -1
int c = year / 100; // Century -1
int h = (c - c / 4 - (8 * c + 13) / 25 + 19 * g + 15) % 30;
int i = h - (h / 28) * (1 - (29 / (h + 1)) * ((21 - g) / 11)); // Anzahl Tage von 21.3. bis Vollmond vor Ostern
int j = (year + year / 4 + i + 2 - c + c / 4) % 7; // Wochentag des Vollmondes vor Ostern
int l = i - j; // Anzahl Tage vom 21. bis Sonntag vor/an Ostern

int month = 3 + (l + 40) / 44;
int day = l + 28 - 31 * ( month / 4 ) ;

return new DateTime(year, month, day, 0, 0, 0, 0, GregorianChronology.getInstance());

Die Formel stammt hierher:

http://www.tondering.dk/claus/cal/node3.html#SECTION003130000000000000000

Aber bloss keine Klammer verändern!