Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Вычисление немецких праздников

Delphi , Синтаксис , Дата и Время

Вычисление немецких праздников

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

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 uber seinen Tag\Monat hinzuzufugen 
  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 uber die Datumsseriennummer hinzuzufugen 
  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 
  // Hinzufugen 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 
  // Hinzufugen der Feiertage, die von Ostern abhangen 
  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 

Единица Delphi для расчета немецких праздников!

Эта единица предоставляет функцию GetHolidayTable для получения массива объектов праздника, каждый из которых содержит дату и имя. Единица также включает в себя несколько процедур для добавления праздников в таблицу, а также функции для расчета конкретных дат, таких как Пасхальный воскресник.

Вот разбивка кода:

  1. Секция интерфейса определяет структуру THoliday с двумя полями: Date (типа TDateTime) и Name (строка).
  2. Секция реализации начинается с определения двух перегруженных процедур AddHoliday. Эти процедуры добавляют праздники в таблицу, либо указывая день и месяц, либо предоставляя дату сериала.
  3. Функция GetEasterDate рассчитывает Пасхальный воскресник для заданного года с использованием формулы календаря Григория.
  4. В основной части реализации добавляются фиксированные праздники, включая Новый год, День труда, День объединения Германии, День Реформации, Рождественскую ночь и День благодарения.
  5. Единица затем добавляет праздники, зависящие от Пасхального воскресника, такие как Четверг святых, Пасхальный понедельник, Воздвижение Креста, Пятидесятница и Понедельник Пятидесятницы.
  6. Наконец, единица рассчитывает третью среду ноября (Бусс- и Беттаг) с помощью некоторых умных арифметических операций со временем.

Эта единица предназначена для работы с годами, начиная с 1584 года, что объясняет почему она не учитывает реформы календаря Григория до этого года.

В целом, эта единица предоставляет полезный инструмент для расчета немецких праздников и может быть легко интегрирована в приложения Delphi.

В статье описывается создание программного обеспечения на языке Delphi для вычисления немецких праздников, включая фиксированные даты и праздники, связанные с Пасхой.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Дата и Время ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 07:12:01/0.0035409927368164/0