AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wochentage Feiertage
Thema durchsuchen
Ansicht
Themen-Optionen

Wochentage Feiertage

Ein Thema von Hansi · begonnen am 2. Nov 2004 · letzter Beitrag vom 3. Nov 2004
Antwort Antwort
Hansi

Registriert seit: 8. Okt 2004
271 Beiträge
 
#1

Wochentage Feiertage

  Alt 2. Nov 2004, 12:36
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?
  Mit Zitat antworten Zitat
Benutzerbild von SnergleTheDwarf
SnergleTheDwarf

Registriert seit: 25. Jul 2003
32 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Wochentage Feiertage

  Alt 2. Nov 2004, 12:44
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
  Mit Zitat antworten Zitat
Hansi

Registriert seit: 8. Okt 2004
271 Beiträge
 
#3

Re: Wochentage Feiertage

  Alt 2. Nov 2004, 12:48
Der Tip mit den Statischen und Dynamischen ist ein guter Tip. Gibt es aber eine Funktion für die Wochentage?
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Wochentage Feiertage

  Alt 2. Nov 2004, 12:49
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.
Peter
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#5

Re: Wochentage Feiertage

  Alt 3. Nov 2004, 00:26
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Wochentage Feiertage

  Alt 3. Nov 2004, 07:36
Hallo Jens,
gibts das auch für Namenstage
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
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Wochentage Feiertage

  Alt 3. Nov 2004, 09:39
Hai Jens,

beim Copy and Paste einfügen von Quellcode sollte auch eine Quellenangabe erfolgen. Immerhin ist es das "geistige Eigentum" eines anderen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#8

Re: Wochentage Feiertage

  Alt 3. Nov 2004, 23:56
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 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