Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Ostersonntag eines Jahres berechnen

  Alt 1. Apr 2007, 21:23
Von Balu der Bär kommt noch folgende Alternative, die sich auf die Gaußsche Osterformel stützt (gilt nur von 1583 bis zum Jahr 3900):

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;
  Mit Zitat antworten Zitat