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'); var Feiertag : array [1..365] of ShortInt; function 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; procedure FeiertageBerechnen(Y:word); var D,dw,OM,aw : word; Dat : TDateTime; Ostern : TDateTime; Weihnacht : TDateTime; Function 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; 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; Aufruf : FeiertageBerechnen(Jahr); Danach enthält die Variable Feiertag Werte kleiner 0 für Sondertage und Werte größer 0 für Feiertage. z.B.: FT:=Feiertag[TagImJahr(Date)]; if FT>0 then Label1.Caption:=Feiertage[FT]; if FT<0 then Label1.Caption:=Sondertage[abs(FT)]; Die Variable Config.Land kann folgende Werte annehmen: 0 : Baden-Württemberg 1 : Bayern 2 : Berlin 3 : Brandenburg 4 : Bremen 5 : Hanmburg 6 : Hessen 7 : Mecklenburg-Vorpommern 8 : Niedersachsen 9 : Nordrhein-Westfalen 10: Rheinland-Pfalz 11: Saarland 12: Sachsen 13: Sachsen-Anhalt 14: Schleswig-Holstein 15: Thüringen