![]() |
Ostersonntag eines Jahres berechnen
Mit folgendem Code kann man das Datum des Ostersonntags in einem beliebigen Jahr berechnen.
Code stammt von mir aus ![]()
Delphi-Quellcode:
HTH!
{
Diese Formel berechnet das Datum des Ostersonntags im Jahr "year". Ostersonntag liegt immer zwischen dem 22. März und dem 25. April. Diese Formel stammt vom Mathematiker Carl Friedrich Gauß (1777-1855). Autor: Florian Meier Webseite: [url]http://www.flomei.de[/url] Gruß und Dank an alle Mitglieder der Delphi-PRAXIS ([url]www.delphipraxis.net[/url]) } function EasterSunday(year: Integer) : String; var a, b, c, d, e: Integer; begin a := year mod 19; b := year mod 4; c := year mod 7; d := ((a * 19) + 24) mod 30; e := (2 * b + 4 * c + 6 * d + 5) mod 7; if((22 + d + e) > 31) then begin Result := IntToStr((d + e - 9)) + '. April'; end else begin Result := IntToStr((22 + d + e)) + '. März'; end end; MfG Florian :hi: [edit] Folgende Ergänzung traf von Billa per PN ein: Zitat:
[edit=Matze]Code formatiert. Mfg, Matze[/edit] |
Re: Ostersonntag eines Jahres berechnen
Von [user]Balu der Bär[/user] kommt noch folgende Alternative, die sich auf die
![]()
Delphi-Quellcode:
(* Gaußsche Osterformel (Berechnung des Ostersonntages)
nach Carl Friedrich Gauß Der 22. März is der früheste Termin, der 25. April der letzte, auf den Ostern fallen kann. Gilt für die Jahre 1583 (Beginn des Gregorianischen Kalenders) bis 3900. Umsetzung: Balu der Baer *) function EasterSunday(Year : Integer) : TDateTime; var a, b, c, d, e, H1, H2, n, m, temp, easter : Integer; begin if not ((Year > 1583) and (Year < 3900)) then raise Exception.CreateFmt('function EasterSunday: parameter Year must be between 1583 and 3900 but is %d', [Year]) else begin a := Year mod 19; b := Year mod 4; c := Year mod 7; H1 := Year div 100; H2 := Year div 400; n := 4 + H1 - H2; m := 15 + H1 - H2 - ((8 * H1 + 13) div 25); d := (19 * a + m) mod 30; e := (2 * b + 4 * c + 6 * d + n) mod 7; if d + e = 35 then easter := 50; if (d = 28) and (e = 6) and (a > 10) then easter := 49 else easter := 22 + d + e; if easter > 31 then begin temp := easter - 31; case temp of 26 : temp := 19; 25 : if (d = 28) and (a > 10) then temp := 18; end; result := EncodeDate(Year, 4, temp); end else result := EncodeDate(Year, 3, easter); end end; //Beispielaufruf: procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(DateTimeToStr(EasterSunday(StrToInt(Edit1.Text)))); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz