![]() |
Wann fällt ein Datum wieder auf den gleichen Wochentag?
Liste der Anhänge anzeigen (Anzahl: 1)
Diese Frage wurde einmal in der „Hörzu“ Feb. 1977 gestellt und vom Verlag mit einem Algorithmus beantwortet, den Ihr im Anhang findet. Vlt. hat ja jemand Lust, den zu coden und für 1900..2099 zu testen. Mein Windoof-PC will im Moment nicht. Die Quelle verdanke ich einem Leser.
Liebe Grüße Wolfgang Mix |
AW: Wann fällt ein Datum wieder auf den gleichen Wochentag?
Nur schnell heruntergetippt, weder optimiert noch getestet:
Delphi-Quellcode:
function NextDateWithSameWeekday(const aDate: TDate): TDate;
var y, m ,d: word; begin DecodeDate(aDate, y, m, d); if (m = 2) and (d = 29) then inc(y, 28) else begin case y mod 4 of 0: if m in [1, 2] then inc(y, 5) else inc(y, 6); 1: inc(y, 6); 2: if m in [1, 2] then inc(y, 6) else inc(y, 11); else if m in [1, 2] then inc(y, 11) else inc(y, 5); end; end; Result := EncodeDate(y, m, d); end; |
AW: Wann fällt ein Datum wieder auf den gleichen Wochentag?
Das ist erst die halbe Miete. Das ist das, was man per Hand macht. Fehlt noch der Beweis, dass die Daten für meinen gewünschten Zeitraum auch stimmen.
|
AW: Wann fällt ein Datum wieder auf den gleichen Wochentag?
Die Überprüfung könnte brute force so aussehen:
Delphi-Quellcode:
Man sollte dabei beachten, daß die berechneten Werte am Ende über den betrachteten Zeitraum hinausgehen.
var
aDate: TDateTime; begin aDate := EncodeDate(1900, 1, 1); while aDate < EncodeDate(2100, 1, 1) do begin if DayOfWeek(aDate) <> DayOfWeek(NextDateWithSameWeekday(aDate)) then begin raise Exception.Create('Passt nicht!'); end; aDate := IncDay(aDate); end; end; Alternativ kann man aber auch einen Algorithmus nehmen, der die Korrektheit garantiert:
Delphi-Quellcode:
function NextDateWithSameWeekday(const aDate: TDate): TDateTime;
var day: Word; dow: Integer; month: Word; year: Word; begin dow := DayOfWeek(aDate); DecodeDate(aDate, year, month, day); repeat Inc(year); if not TryEncodeDate(year, month, day, result) then Continue until dow = DayOfWeek(result); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz