Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wochentage Feiertage (https://www.delphipraxis.net/33155-wochentage-feiertage.html)

Hansi 2. Nov 2004 12:36


Wochentage Feiertage
 
Hey,

In meiner Tabelle werden Werte wie z.B. "Datum Wert" eingelesen. Dabei soll das Programm aber automatisch überprüfen ob das Datum ein Wochentag ist und ob es kein Feiertag ist.

Kann mir da einer helfen?

SnergleTheDwarf 2. Nov 2004 12:44

Re: Wochentage Feiertage
 
irgendwo hinterlegen was die feiertag sind -> die "festen".
und die "dynamsichen" beim start einmal berechnen und ebenfalls
hinterlegen .

dynamsich -> Ostern, etc.

und dann mit den hinterlegten werten (zb im Array) vergleichen
und ggf. gewünschte aktionen durchführen ...

mfg StD

Hansi 2. Nov 2004 12:48

Re: Wochentage Feiertage
 
Der Tip mit den Statischen und Dynamischen ist ein guter Tip. Gibt es aber eine Funktion für die Wochentage?

Jasocul 2. Nov 2004 12:49

Re: Wochentage Feiertage
 
Mit DayOfWeek (-> OH) bekommst du den Wochentag.
Feiertage sind regional abhängig. Dazu gibt es noch die beweglichen Feiertag. Wenn hier keiner ein Berechnung dafür hat, solltest du mal googlen.

jensw_2000 3. Nov 2004 00:26

Re: Wochentage Feiertage
 
Hallo Jasocul,

für die Feiertage kannst du folgende unit verwenden ...

Delphi-Quellcode:
unit uFeiertage;

interface

uses Windows, SysUtils;

type
  THoliday = record
    Date: TDateTime;
    Name: STRING;
  end;
  THolidayTable = array of THoliday;

function GetHolidayTable(Year: WORD): THolidayTable;

implementation

function GetHolidayTable(Year: WORD): THolidayTable;

  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;

  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 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
  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');

  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');

  //Ermittelt den 3. Mittwoch im November ...
  EDate := EncodeDate(Year, 11, 1);
  EDate := EDate + ((11 - DayOfWeek(EDate)) MOD 7) + 14;
  //    AddHoliday(EDate, 'Buß- und Bettag');
end;

end.
Schöne Grüße,
Jens
:hi:

Jasocul 3. Nov 2004 07:36

Re: Wochentage Feiertage
 
Hallo Jens,
gibts das auch für Namenstage :lol:
Mal ernsthaft:
Schöne Unit. Kann man noch eine schöne Routine für feste regionale Feiertage einbauen, die die Daten aus einer Datei einliest.
An deinen Bezeichnern solltest du arbeiten. a,b,c,d,e,f... sind nicht sehr programmiererfreundlich zu lesen. Ansonsten vielleicht kommentieren.
Da ich mich mit Datumsberechnungen auch schon sehr viel beschäftigt habe, haber ich da wenig Probleme, den Source zu interpretieren. Das gilt aber vermutlich nicht für alle im Forum.

Ich nehme an, dass ich die Unit für mich nutzen kann. Habe da nämlich ein kleines Programm (Fehlzeitenplaner), wo ich es gebrauchen könnte.

Besten Ddank,
Peter

Sharky 3. Nov 2004 09:39

Re: Wochentage Feiertage
 
Hai Jens,

beim Copy and Paste einfügen von Quellcode sollte auch eine Quellenangabe erfolgen. Immerhin ist es das "geistige Eigentum" eines anderen.

jensw_2000 3. Nov 2004 23:56

Re: Wochentage Feiertage
 
Sorry,
habe aber nie behauptet das der Code von mir ist.
Ich war mir nicht sicher wo ich die unit damals gefunden habe.

Schöne Grüße,
Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz