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;