Am häufigsten wird der Algorithmus von
Zeller verwendet.
Dieser ist auch in den meisten Betriebssystemen implementiert.
Die Ergebnisse liefern die sogenannte "voreilende" Zählung
mit Samstag=0, Sonntag = 1 usw.
Von vielen weiteren Kalenderformeln ist der Algorithmus von
Robertson für den gregorianischen Kalender hervorzuheben,
da er sehr einfach ist. Die Ergebnisse liefern die früher
übliche "normale" Zählung mit So=0, Mo=1 usw.
Wer es ISO-konform mag, kann jeweils noch eine Case-Struktur
hinterherschieben.
Die nach Delphi umgesetzten Codeschnippsel:
Delphi-Quellcode:
function wt_zellergreg(d,m,y:integer):integer;
var century,year:integer;
begin
if (m<3) then
begin
m:=m+12;
y:=y-1;
end;
century := y div 100;
year := y mod 100;
result:= (d + ((m+1)*26) div 10 + year + year div 4
+ century div 4 + 5*century) mod 7;
//Samstag:=0;Sonntag=1
end;
function wt_zellerjul(d,m,y:integer):integer;
var century,year:integer;
begin
if m<3 then
begin
m:=m+12;
y:=y-1;
end;
century := y div 100;
year := y mod 100;
result:=(d + ((m+1)*13 div 5) + year + year div 4
+ 5 + 6 * century) mod 7;
//Samstag:=0;Sonntag=1
end;
function WT_Robertson(T,M,J:integer):integer;
var A,B,C,D,E:integer;
Begin
A:=M+10;
B:=(M-14) div 12 + J;
C:=A-12*A div 13;
D:=(13*C-1) div 5;
E:=5*(B mod 100) div 4;
result:=(D+T+77+E+B div 400 - 2*(B div 100)) mod 7;
//Sonntag =0; Montag=1
end;
procedure TForm1.Button1Click(Sender: TObject);
var dd,mm,yy:integer;
begin
dd:=StrToInt(Spinedit1.Text);
mm:=StrToInt(Spinedit2.Text);
yy:=StrToInt(Spinedit3.Text);
Edit1.Text:=IntToStr(wt_zellerjul(dd,mm,yy));
end;
procedure TForm1.Button2Click(Sender: TObject);
var d,m,y:integer;
begin
d:=StrToInt(SpinEdit1.Text);
m:=StrToInt(SpinEdit2.Text);
y:=StrToInt(SpinEdit3.Text);
Edit1.Text:=IntToStr(wt_zellergreg(d,m,y));
end;
procedure TForm1.Button3Click(Sender: TObject);
var d,m,y:integer;
begin
d:=StrToInt(SpinEdit1.Text);
m:=StrToInt(SpinEdit2.Text);
y:=StrToInt(SpinEdit3.Text);
Edit1.Text:=IntToStr(WT_Robertson(d,m,y));
end;
end.
Wolfgang Mix