whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1541)

Database (90)
Files (137)
Forms (107)
Graphic (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Math (76)
Misc (126)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (266)
VCL (242)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

41 Visitors Online


 
...calculate the german holidays?
Autor: Benny Baumann
[ Print tip ]  

Tip Rating (19):  
     


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

 

Rate this tip:

poor
very good


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners