Mega Code Archive

 
Categories / Delphi / Algorithm Math
 

Calculate the german holidays

Title: calculate the german holidays? unit Feiertage; // Unit Holidays; interface uses Windows, SysUtils; // Declare a structure to hold the Information // Deklarieren der Struktur, um die Feiertage abzuspeichern type THoliday = record Date: TDateTime; Name: string; end; THolidayTable = array of THoliday; // Function to call to get the Holiday Table with all Holidays of a year // Der Funktionsaufruf, um die Feiertage eines Jahres abzufragen function GetHolidayTable(Year: Word): THolidayTable; implementation function TUrlaubsForm.GetHolidayTable(Year: Word): THolidayTable; // Function to add a holiday by Day and Month // Funktion, um einen Feiertag über seinen Tag\Monat hinzuzufügen procedure AddHoliday(DD, MM: Word; HDName: string); overload; begin SetLength(Result, High(Result) + 2); with Result[High(Result)] do begin Date := EncodeDate(Year, MM, DD); Name := HDName; end; end; //Function to add holiday by date serial //Funktion, um den Feiertag über die Datumsseriennummer hinzuzufügen procedure AddHoliday(HDDate: TDateTime; HDName: string); overload; begin SetLength(Result, High(Result) + 2); with Result[High(Result)] do begin Date := HDDate; Name := HDName; end; end; // Function to get easter sunday // Function zur Berechnung des Ostersonntags function GetEasterDate(YYYY: Word): TDateTime; var A, B, C, D, E, F, G, H, I, K, L, M, N, P: Word; DD, MM: Word; begin a := YYYY mod 19; b := YYYY div 100; c := YYYY mod 100; d := b div 4; e := b mod 4; f := (b + 8) div 25; g := (b - f + 1) div 3; h := (19 * a + b - d - g + 15) mod 30; i := c div 4; k := c mod 4; l := (32 + 2 * e + 2 * i - h - k) mod 7; m := (a + 11 * h + 22 * l) div 451; n := (h + l - 7 * m + 114) div 31; p := (h + l - 7 * m + 114) mod 31 + 1; DD := p; MM := n; Result := EncodeDate(YYYY, MM, DD); end; var EDate: TDateTime; begin // Add fixed holidays // Hinzufügen der festen Feiertage AddHoliday(1, 1, 'Neujahr'); AddHoliday(1, 5, 'Tag der Arbeit'); AddHoliday(3, 10, 'Tag der deutschen Einheit'); AddHoliday(31, 10, 'Reformationstag'); // AddHoliday(24, 12, 'Heiligabend'); AddHoliday(25, 12, '1. Weihnachtsfeiertag'); AddHoliday(26, 12, '2. Weihnachtsfeiertag'); // AddHoliday(31, 12, 'Silvester'); // Add holidays relative to easter sunday // Hinzufügen der Feiertage, die von Ostern abhängen EDate := GetEasterDate(Year); AddHoliday(EDate, 'Ostersonntag'); AddHoliday(EDate - 2, 'Karfreitag'); AddHoliday(EDate + 1, 'Ostermontag'); AddHoliday(EDate + 39, 'Christi Himmelfahrt'); AddHoliday(EDate + 49, 'Pfingstsonntag'); AddHoliday(EDate + 50, 'Pfingstmontag'); // Gets 3rd Wednesday in November // Ermittelt den 3. Mitwoch im November EDate := EncodeDate(Year, 11, 1); EDate := EDate + ((11 - DayOfWeek(EDate)) mod 7) + 14; AddHoliday(EDate, 'Buß- und Bettag'); end; end. // This Units works since the year 1584 // Diese Unit arbeitet mit Jahreszahlen nach 1584