Martin Luther King Jr. Day - Third Monday in January
function MartinLutherKingJrDay(TargetYear: Integer): TDate;
var
JanuaryMondayCount: Integer;
TargetDate: TDate;
begin
MartinLutherKingJrDay := 0;
JanuaryMondayCount := 0;
TargetDate := 0;
TargetDate := StrToDate('1/1/'+IntToStr(TargetYear));
JanuaryMondayCount := 0;
If DayOfTheWeek(TargetDate) = 1 then JanuaryMondayCount := 1; //1 = Monday
repeat
TargetDate := TargetDate + 1;
If DayOfTheWeek(TargetDate) = 1 then JanuaryMondayCount := JanuaryMondayCount + 1;
until JanuaryMondayCount = 3;
MartinLutherKingJrDay := TargetDate;
end;
The procedure below uses the function shown above to retrieve Martin Luther King Jr. Day for a range of years. The FormatDateTime function can be used to format the date in any way desired.
procedure TForm1.Button1Click(Sender: TObject);
var
Year: Integer;
begin
For Year := 2000 to 2100 do
begin
Memo1.Lines.Add(FormatDateTime('dddd, mmmm d, yyyy', MartinLutherKingJrDay(Year)));
end;
end;
Posted: Sunday, June 25, 2023
Last updated: Tuesday, July 4, 2023