FormatDateTime の月、曜日を英語表記にする方法


var
StoredMonthDayNames: Boolean = False;
OldShortMonthNames: array [1..12] of string;
OldLongMonthNames: array [1..12] of string;
OldShortDayNames: array [1..12] of string;
OldLongDayNames: array [1..12] of string;

//Delphi標準のグローバル12月、7曜日を英語に変換する
//参考 「Delphi3 Q&A」より
procedure InitMonthDayNames;
const
EnglishMonthNames: array [1..12] of PChar = (
'January', 'February', 'March', 'April', 'May', 'June', 'July',
'August', 'September', 'October', 'November', 'December' );
EnglishDayNames: array [1..7] of PChar = (
'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday');
var
I: Integer;
begin
for I := Low(LongMonthNames) to High(LongMonthNames) do
begin
if not StoredMonthDayNames then
begin
OldLongMonthNames[I] := LongMonthNames[I];
OldShortMonthNames[I] := ShortMonthNames[I];
end;
LongMonthNames[I] := EnglishMonthNames[I];
ShortMonthNames[I] := Copy(LongMonthNames[I], 1, 3);
end;
for I := Low(LongDayNames) to High(LongDayNames) do
begin
if not StoredMonthDayNames then
begin
OldLongDayNames[I] := LongDayNames[I];
OldShortDayNames[I] := ShortDayNames[I];
end;
LongDayNames[I] := EnglishDayNames[I];
ShortDayNames[I] := Copy(LongDayNames[I], 1, 3);
end;
StoredMonthDayNames := True;
end;

procedure RestoreMonthDayNames;
var
I: Integer;
begin
if not StoredMonthDayNames then
Exit;
for I := Low(LongMonthNames) to High(LongMonthNames) do
begin
LongMonthNames[I] := OldLongMonthNames[I];
ShortMonthNames[I] := OldShortMonthNames[I];
end;
for I := Low(LongDayNames) to High(LongDayNames) do
begin
LongDayNames[I] := OldLongDayNames[I];
ShortDayNames[I] := OldShortDayNames[I];
end;
end;

自前で月、曜日を用意しておいて、Delphiグローバル変数を入れ替える。
「DelphiQ&A3」より