Ostersonntag und Ostermontag berechnen
Eine Aufgabe auf der Arbeit brachte mich dazu, daran zu denken, dass Offizielle Feiertage ja berechnet werden könnte. Somit kam ich auf einen Blog, welches die Feiertage mit SQL Sripts löste. Leider schien dies nicht ganz klar zu sein, für welche Datenbank. Ist jedoch nichts, was mich aufhält und nahm die Wikipedia Beschreibung über Gausche Osterformel (Wiki).
Verwunderlich ist, dass meine Suche im Internet keine Ergebnisse erbrachte für MS SQL. Manchmal glaube ich, dass mir die Suche absichtlich keine oder kaum brauchbare Ergebnisse zeigt.
Benötigt
Rider oder Visual Studio für C#
Wann ist Ostern für das Jahr
Mit Eingabe des Jahr, soll mir der Ostersonntag und Ostermontag berechnet werden.
Gaußsche Osterformel
Seien wir doch ehrlich, wie ist man auf so eine Formel nur gekommen. Bis letzte Woche dachte ich, dass wird irgendwie entschieden und fertig. Aber weit gefehlt. Im Gegensatz zu anderen Feiertagen, ist dieser immer an einem Sonntag und Montag. Oder schon mal was vom Osterdienstag gehört. Die anderen Feiertage sind an ihrem festen Datum platziert.
Folgender Code ermöglicht die Eingabe und Ausgabe einer C# Consolen Anwendung. Für die Berechnung werden nur Ganzzahlen verwendet und die Funktion Modulo.
Console.WriteLine("Calculate Ostern");
Console.WriteLine("Enter year:");
var year = int.Parse(Console.ReadLine());
var a = year % 19; // Zyklus
var b = year % 4; // Schaltjahr
var c = year % 7;
var k = year / 100;
var p = (8 * k + 13) / 25;
var q = k / 4;
var m = (15 + k - p - q) % 30; // Korrektur Sonntag und Montag gleichung
var n = (4 + k - q) % 7; // Korrektur Sonnengleichung
var d = (19 * a + m) % 30; // Mondentfernung
var e = (2 * b + 4 * c + 6 * d + n) % 7;
var day = 22 + d + e;
var ostersonntag = (new DateTime(year, 3, 1)).AddDays(day - 1);
var ostermontag = ostersonntag.AddDays(1);
Console.WriteLine($"Ostersonntag: {ostersonntag:dd.MM.yyyy}");
Console.WriteLine($"Ostermontag: {ostermontag:dd.MM.yyyy}");
Console.WriteLine("Press any key to exit");
Ausnahmen
Wie in jeder Sache kommen auch Ausnahmen vor, die selbst der Algorithmus nicht hergibt. An der Stelle kann ich kann ich nur auf die Wiki Seite oder einer anderen Lektüre verweisen.
Kommentare