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

Beliebte Posts aus diesem Blog

Arduino Control (Teil 5) - PWM Signal einlesen

RC Fahrtenregler für Lego Kettenfahrzeug

Angular auf dem Raspberry Pi