unit Feiertage;
interface
uses
SysUtils, Classes;
const
Feiertage :
array [1..19]
of string[25] =
('
Neujahr','
Maifeiertag','
Tag der deutschen Einheit','
Allerheiligen',
'
Totensonntag','
Volkstrauertag','
1. Weihnachtstag','
2. Weihnachtstag',
'
Karfreitag','
Ostersonntag','
Ostermontag','
Christi Himmelfahrt',
'
Pfingstsonntag','
Pfingstmontag','
Fronleichnam','
Heilige 3 Könige',
'
Mariä Himmelfahrt','
Reformationstag','
Buß- und Bettag');
Sondertage :
array [1..24]
of string[25] =
('
Mariä Lichtmeß','
Valentinstag','
Weiberfastnacht','
Rosenmontag','
Fastnacht',
'
Aschermittwoch','
Mariä Verkündigung','
Palmsonntag','
Gründonnerstag','
Muttertag',
'
Peter und Paul','
Mariä Geburt','
Erntedankfest','
Mariä Empfängnis','
Silvester',
'
1. Advent','
2. Advent','
3. Advent','
4. Advent','
Heiligabend','
Frühlingsanfang',
'
Sommmeranfang','
Herbstanfang','
Winteranfang');
type
TFeiertage =
class(TComponent)
private
{ Private-Deklarationen }
FFeiertag :
array [1..365]
of ShortInt;
FFeiertag: Boolean;
FFeiertagName:
String;
FDatum: TDateTime;
FBundesland:
String;
function OsterSonntag(Y:word):TDateTime;
function TagImJahr(Datum:TDateTime):word;
procedure FeiertageBerechnen(Y:word);
protected
{ Protected-Deklarationen }
public
constructor Create(Year:Word)
override;
destructor destroy;
override;
{ Public-Deklarationen }
published
property Datum: TDateTime
read FDatum;
property Feiertag: Boolean
read FFeiertag;
property Feiertagname:
String read FFeiertagName;
property Bundesland:
String write FBundesland;
{ Published-Deklarationen }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Beispiele', [TFeiertage]);
end;
constructor TFeiertage.Create(Year:Word);
begin
inherited;
FeiertageBerechnen(Year);
//
end;
destructor TFeiertage.destroy;
begin
//
inherited;
end;
function TFeiertage.TagImJahr(Datum:TDateTime):word;
var T,M,J : word;
Erster : TDateTime;
begin
try
DecodeDate(Datum,J,M,T);
Erster:=EncodeDate(J,1,1);
Result:=trunc(Datum-Erster+1);
except
Result:=0;
end;
end;
function TFeiertage.OsterSonntag(Y:word):TDateTime;
var a,b,c,d,e,tag,monat : integer;
begin
a:=y
MOD 19 ;
b:=y
MOD 4;
c:=y
MOD 7;
d:=(19*a+24)
MOD 30;
e:=(2*b+4*c+6*d+5)
MOD 7;
Tag:=22+d+e;
monat:=3;
IF Tag>31
then begin
tag:=d+e-9;
monat:=4;
end;
IF (tag=26)
AND (monat=4)
then
tag:=19;
IF (tag=25)
AND (monat=4)
AND (d=28)
AND (e=6)
AND (a>10)
then
tag:=18;
try
Result:= EncodeDate(y,monat,tag);
except
Result:=0;
end;
end;
procedure TFeiertage.FeiertageBerechnen(Y:word);
var D,dw,OM,aw : word;
Dat : TDateTime;
Ostern : TDateTime;
Weihnacht : TDateTime;
begin
for D:=1
to 365
do
Feiertag[D]:=0;
Ostern:=OsterSonntag(Y);
try
DecodeDate(Ostern,Y,OM,D);
except
OM:=4;
end;
try
Weihnacht:=EncodeDate(Y,12,25);
if (DayOfWeek(Weihnacht)-1)=0
then
dw:=7
else
dw:=DayOfWeek(Weihnacht)-1;
except
Weihnacht:=-1;
dw:=0;
end;
{Mariä Lichtmeß} {Sondertage}
Dat:=Encodedate(Y,2,2);
Feiertag[TagImJahr(Dat)]:=-1;
{Valentinstag}
Dat:=Encodedate(Y,2,14);
Feiertag[TagImJahr(Dat)]:=-2;
{Weiberfastnacht}
Dat:=Ostern-45;
while DayOfWeek(Dat)<>2
do
Dat:=Dat-1;
Feiertag[TagImJahr(Dat)-4]:=-3;
{Rosenmontag}
Feiertag[TagImJahr(Dat)]:=-4;
{Fastnacht}
Feiertag[TagImJahr(Dat)+1]:=-5;
{Aschermittwoch}
Feiertag[TagImJahr(Dat)+2]:=-6;
{Mariä Verkündigung}
Dat:=Encodedate(Y,3,25);
Feiertag[TagImJahr(Dat)]:=-7;
{Palmsonntag}
Feiertag[TagImJahr(Ostern)-7]:=-8;
{Gründonnerstag}
Feiertag[TagImJahr(Ostern)-3]:=-9;
{Muttertag}
Dat:=EncodeDate(y,4,30);
aw:=DayOfWeek(Dat)-1;
Dat:=Dat-aw+14;
if Dat=(Ostern+49)
then
Dat:=Dat-7;
Feiertag[TagImJahr(Dat)]:=-10;
{Peter und Paul}
Dat:=Encodedate(Y,6,29);
Feiertag[TagImJahr(Dat)]:=-11;
{Mariä Geburt}
Dat:=Encodedate(Y,9,8);
Feiertag[TagImJahr(Dat)]:=-12;
{Erntedankfest}
Dat:=Encodedate(Y,10,1);
while DayOfWeek(Dat)<>1
do
Dat:=Dat+1;
Feiertag[TagImJahr(Dat)]:=-13;
{Mariä Empfängnis}
Dat:=Encodedate(Y,12,8);
Feiertag[TagImJahr(Dat)]:=-14;
{Silvester}
Dat:=Encodedate(Y,12,31);
Feiertag[TagImJahr(Dat)]:=-15;
{1. Advent}
Dat:=Weihnacht;
while DayOfWeek(Dat)<>1
do
Dat:=Dat-1;
Feiertag[TagImJahr(Dat)-21]:=-16;
{2. Advent}
Feiertag[TagImJahr(Dat)-14]:=-17;
{3. Advent}
Feiertag[TagImJahr(Dat)-7]:=-18;
{4. Advent}
Feiertag[TagImJahr(Dat)]:=-19;
{Heiligabend}
Feiertag[TagImJahr(Weihnacht)-1]:=-20;
{Frühlingsanfang}
Dat:=Encodedate(Y,3,21);
Feiertag[TagImJahr(Dat)]:=-21;
{Sommmeranfang}
Dat:=Encodedate(Y,6,21);
Feiertag[TagImJahr(Dat)]:=-22;
{Herbstanfang}
Dat:=Encodedate(Y,9,23);
Feiertag[TagImJahr(Dat)]:=-23;
{Winteranfang}
Dat:=Encodedate(Y,12,22);
Feiertag[TagImJahr(Dat)]:=-24;
{Neujahr} {Feiertage}
Feiertag[1]:=1;
{Maifeiertag}
Dat:=Encodedate(Y,5,1);
Feiertag[TagImJahr(Dat)]:=2;
{Tag der deutschen Einheit}
Dat:=Encodedate(Y,10,3);
Feiertag[TagImJahr(Dat)]:=3;
{Allerheiligen}
Dat:=Encodedate(Y,11,1);
Feiertag[TagImJahr(Dat)]:=4;
{Totensonntag}
if Weihnacht>=0
then
Feiertag[TagImJahr(Weihnacht-dw-28)]:=5;
{Buß- und Bettag}
if Config.Land=12
then
Feiertag[TagImJahr(Weihnacht-dw-32)]:=19;
{Volkstrauertag}
if Weihnacht>=0
then
Feiertag[TagImJahr(Weihnacht-dw-35)]:=6;
{1. Weihnachtstag}
if Weihnacht>=0
then
Feiertag[TagImJahr(Weihnacht)]:=7;
{2. Weihnachtstag}
if Weihnacht>=0
then
Feiertag[TagImJahr(Weihnacht)+1]:=8;
{Karfreitag}
Feiertag[TagImJahr(Ostern)-2]:=9;
{Ostersonntag}
Feiertag[TagImJahr(Ostern)]:=10;
{Ostermontag}
Feiertag[TagImJahr(Ostern)+1]:=11;
{Christi Himmelfahrt}
Feiertag[TagImJahr(Ostern)+39]:=12;
{Pfingstsonntag}
Feiertag[TagImJahr(Ostern)+49]:=13;
{Pfingstmontag}
Feiertag[TagImJahr(Ostern)+50]:=14;
{Fronleichnam}
if (Config.Land<2)
or ((Config.Land>=9)
and (Config.Land<=12))
or (Config.Land=15)
then
Feiertag[TagImJahr(Ostern)+60]:=15;
{Heilige 3 Könige}
if (Config.Land=0)
or (Config.Land=1)
or (Config.Land=13)
then
Feiertag[6]:=16;
{Mariä Himmelfahrt}
if (Config.Land=1)
or (Config.Land=11)
then begin
Dat:=Encodedate(Y,8,15);
Feiertag[TagImJahr(Dat)]:=17;
end;
{Reformationstag}
if (Config.Land=3)
or (Config.Land=7)
or (Config.Land=12)
or (Config.Land=13)
or (Config.Land=15)
then begin
Dat:=Encodedate(Y,10,31);
Feiertag[TagImJahr(Dat)]:=18;
end;
end;
end.