| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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
|