Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wann fällt ein Datum wieder auf den gleichen Wochentag?

  Alt 14. Aug 2016, 14:30
Die Überprüfung könnte brute force so aussehen:

Delphi-Quellcode:
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;
Man sollte dabei beachten, daß die berechneten Werte am Ende über den betrachteten Zeitraum hinausgehen.

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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat