Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Buss - BetTag richtig berechnen (https://www.delphipraxis.net/61781-buss-bettag-richtig-berechnen.html)

Hobby-Programmierer 26. Jan 2006 11:10


Buss - BetTag richtig berechnen
 
Mahlzeit :-D ...,

beim Neu/Umcoden eines älteren Programms von mir stehe ich vor einem Rätsel!
Bisher hatte ich den den Buss und Bettag wie folgt berechnet:

Delphi-Quellcode:
Function GetBBetTag(Jahr: Word): TDate; //Buß-und Bettag
var Datum: TDate;
begin
  Datum:= EncodeDate(Jahr, 11, 1);
  Result:= Datum + ((11 - DayOfWeek(Datum)) mod 7) + 14;
end;
Habe aber vorhin mit erstaunen festgestellt das meine Function falsch rechnet! Dachte mir kein Problem, habe hier im Forum gesucht und leider feststellen müssen das alle Routinen die ich gefunden habe ebenso falsch liegen. Gegoogelt und ebenso Fehlanzeige ...

Jetzt habe ich meine Function umgestellt, bin mir aber net sicher ob ich das so korrekt ist - richtig rechnen tut sie zumindest ...

Delphi-Quellcode:
Function GetBBetTag(Jahr: Word): TDate; //Buß-und Bettag
var Datum: TDate;
begin
  Datum:= EncodeDate(Jahr, 11, 1);
  Result:= Datum + ((11 - DayOfWeek(Datum)) mod 7) + 14;
  if DayOfWeek(Datum) = 4 then
    Result:= Result + 7;
end;
Vielleicht kennt jemand von Euch einen bessere Berechnung oder kann andere Vorschläge machen.

Danke und Gruss Mario

Flocke 26. Jan 2006 11:39

Re: Buss - BetTag richtig berechnen
 
Nicht getestet, sollte aber so gehen:
Delphi-Quellcode:
Function GetBBetTag(Jahr: Word): TDate; //Buß-und Bettag
var Datum: TDate;
begin
  Datum := EncodeDate(Jahr, 11, 15);
  Result := Datum + (10 - DayOfWeek(Datum)) mod 7;
end;

Gollum 26. Jan 2006 12:09

Re: Buss - BetTag richtig berechnen
 
Hallo,

die Berechnung des Buß- und Bettags ist mit den o.g. Formeln so nicht richtig. Das Datum des Buß- und Bettages richtet sich nach dem Kirchenjahr.

Definition:
Mittwoch vor dem letzten Sonntag des Kirchenjahres. Dies ist per Definition, der Sonntag vor dem 1. Advent. Der Beginn des Kirchenjahres ist somit der 1. Advent.

Um nun den den Buß- und Bettag richtig zu berechnen, muss der der 4. Advent ermittelt werden und von diesem Datum müssen dann 32 Tage abgezogen werden.
Der 4. Advent ist als der Sonntag vor dem 1. Weihnachtsfeiertag definiert.

Delphi-Quellcode:
uses
  DateUtils;
....

function BussBettag(aJahr:Integer):TDateTime;
var advent:TDateTime;
begin
  // Datum des Heiligen Abends; 24.12
  advent:=EncodeDate(aJahr);
  // 4. Advent ermitteln; Sonntag vor dem 1.Weihnachtsfeiertag
  while not (DayOfTheWeek(advent)=7) do advent:=advent-1.0;
  //so, zum Schluss noch 32 Tage abziehen
  Result:=advent-32;
end; // BussBettag
Siehe auch: kalenderlexikon.de

Hobby-Programmierer 27. Jan 2006 21:56

Re: Buss - BetTag richtig berechnen
 
Super !! und vielen Dank.
Mich verwundert nur das alle mir bekannten Sourcen falsch rechnen, eben vom 3. Mittwoch im November ausgehen! Bisher hatte ja auch das Datum des Feiertages immer gestimmt, nur im exotischem 2006 nicht :? Sei's drum, jetzt kann ich dat ja besser :P

Übrigens: den Link kannte ich, ziehe ich immer zu rate wenn ich was zu bestimmten Feiertagen wissen möchte. Hatte ich auch als sich ein Benutzer meiner Dienstplanverwaltung beschwerte :x ; das mit dem Kirchenjahr hatte ich leider überlesen :wall:

Danke nochmal, Gruss Mario :dancer:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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