SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE FUNCTION [kalender].[Ostern] (@Jahr AS INT) RETURNS DATE AS /* Gaußsche Osterformel (ergänzt von H. Lichtenberg) Ostern wird nach einer christlichen Tradition am ersten Sonntag nach dem ersten Vollmond des Frühjahrsanfangs auf der nördlichen Halbkugel gefeiert. Die Bestimmung des kalendarischen Datums nutzt die zyklische Natur der Erd- und Mondbewegung aus (76 Jahre = 940 Mond-Monate = 27759 Tage, Kallippischer Zyklus, benannt nach Kallippos aus Kyzikos, um 330 v. Chr.). Sie nimmt dagegen keine Rücksicht auf aktuelle astronomische Beobachtungen von Vollmond und Tag-und-Nacht-Gleichen. Zur besseren Anpassung an die tatsächlichen Umlaufzeiten von Mond und Erde werden seit der Einführung des Gregorianischen Kalenders an den Jahrhundertgrenzen gewisse Korrekturen am Kallippischen Zyklus angebracht. Carl Friedrich Gauß (1777 - 1855) hat aus den langen und schwer verständlichen Texten von Christophorus Clavius eine praktische Rechenvorschrift abgeleitet. Diese wird hier in einer von Dr. Heiner Lichtenberg, Bonn, modifizierten Form angegeben (H. Lichtenberg, Zur Interpretation der Gaußschen Osterformel und ihrer Ausnahmeregeln, Historia Mathematica 24, 441 - 444 (1997)). In dieser modernen Form lässt sie sich leicht in eine Funktion übersetzen, um das Osterdatum für jedes Jahr zu errechnen. [1] https://www.ptb.de/cms/ptb/fachabteilungen/abt4/fb-44/ag-441/darstellung-der-gesetzlichen-zeit/wann-ist-ostern.html [2] https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel#Eine_erg%C3%A4nzte_Osterformel */ BEGIN DECLARE @K INT, @M INT, @S INT, @A INT, @D INT, @R INT, @OG INT, @SZ INT, @OE INT DECLARE @Ostersonntag_Tag INT, @Ostersonntag_Monat INT -- 1. die Säkularzahl (Jahrhundert) SET @K = @Jahr / 100 -- 2. die säkulare Mondschaltung SET @M = 15 + (3 * @K + 3) / 4 - (8 * @K + 13) / 25 -- 3. die säkulare Sonnenschaltung SET @S = 2 - (3 * @K + 3) / 4 -- 4. den Mondparameter SET @A = @Jahr % 19 -- 5. den Keim für den ersten Vollmond im Frühling SET @D = (19 * @A + @M) % 30 -- 6. die kalendarische Korrekturgröße SET @R = (@D + @A / 11) / 29 -- 7. die Ostergrenze (Tag im März) SET @OG = 21 + @D - @R -- 8. den ersten Sonntag im März SET @SZ = 7 - (@Jahr + @Jahr / 4 + @S) % 7 -- 9. die Entfernung des Ostersonntags von der Ostergrenze (Osterentfernung in Tagen) SET @OE = 7 - (@OG - @SZ) % 7 --10. das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.) SET @Ostersonntag_Monat = 3 SET @Ostersonntag_Tag = @OG + @OE --11. Falls Ostersonntag im April liegt IF @Ostersonntag_Tag > 31 BEGIN SET @Ostersonntag_Monat = 4 SET @Ostersonntag_Tag = @Ostersonntag_Tag - 31 END RETURN DATEFROMPARTS(@Jahr, @Ostersonntag_Monat, @Ostersonntag_Tag) END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO GO