Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2019年05月21日] [更新 2019年05月21日] Delphi 一般・その他
   
月名あるいは曜日名の英語表記
動作確認等 Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32
[整理番号 - 0470]







01_デフォルトの設定での月名と曜日名


月名と曜日名は TFormatSettings の以下のメンバーから取得できます.


  • LongMonthNames - 長い月名の文字列配列
  • ShortMonthNames - 短い月名の文字列配列
  • LongDayNames - 長い曜日名の文字列配列
  • ShortDayNames - 短い曜日名の文字列配列

以下は,月名と曜日名を列挙するサンプルコードとしの実行結果です.



図1
長い月名と短い月名
図2
長い曜日名と短い曜日名

リスト1
//============================================================================
//  現在のロケールにおける長い月名と短い月名のリスト
//============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LFmtSet : TFormatSettings;
  LIndex  : Integer;
  LText   : string;
begin
  Memo1.Lines.Clear;

  LFmtSet := TFormatSettings.Create;

  for LIndex := Low(LFmtSet.LongMonthNames) to HIgh(LFmtSet.LongMonthNames) do begin
    LText := LFmtSet.LongMonthNames[LIndex] + ' - '
           + LFmtSet.ShortMonthNames[LIndex];
    Memo1.Lines.Add(LText);
  end;
end;

//============================================================================
//  現在のロケールにおける長い曜日名と短い曜日名のリスト
//============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LFmtSet : TFormatSettings;
  LIndex  : Integer;
  LText   : string;
begin
  Memo1.Lines.Clear;

  LFmtSet := TFormatSettings.Create;

  for LIndex := Low(LFmtSet.LongDayNames) to HIgh(LFmtSet.LongDayNames) do begin
    LText := LFmtSet.LongDayNames[LIndex] + ' - '
           + LFmtSet.ShortDayNames[LIndex];
    Memo1.Lines.Add(LText);
  end;
end;




02_英語表記の月名と曜日名


TFormatSettings.Create の引数のロケール ID として $0409 を指定すると,各文字列配列の要素には英語表記の月名と曜日名が格納されます.$0409 は英語 (米国) のロケール ID です.


図3
英語表記の長い月名と短い月名
図4
英語表記の長い曜日名と短い曜日名

ロケール ID の値を $0419 にするとロシア語になります.


図5
ロシア語の長い月名と短い月名

リスト2
//============================================================================
//  長い月名と短い月名の英語表記リスト
//  $0409 は 10 進数では 1033
//============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LFmtSet : TFormatSettings;
  LIndex  : Integer;
  LText   : string;
begin
  Memo1.Lines.Clear;

  LFmtSet := TFormatSettings.Create($0409);

  for LIndex := Low(LFmtSet.LongMonthNames) to HIgh(LFmtSet.LongMonthNames) do begin
    LText := LFmtSet.LongMonthNames[LIndex] + ' - '
           + LFmtSet.ShortMonthNames[LIndex];
    Memo1.Lines.Add(LText);
  end;
end;

//============================================================================
//  長い曜日名と短い曜日名の英語表記リスト
//  $0409 は 10 進数では 1033
//============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LFmtSet : TFormatSettings;
  LIndex  : Integer;
  LText   : string;
begin
  Memo1.Lines.Clear;

  LFmtSet := TFormatSettings.Create($0409);

  for LIndex := Low(LFmtSet.LongDayNames) to HIgh(LFmtSet.LongDayNames) do begin
    LText := LFmtSet.LongDayNames[LIndex] + ' - '
           + LFmtSet.ShortDayNames[LIndex];
    Memo1.Lines.Add(LText);
  end;
end;




03_FormatDateTime で英語表記の月名と曜日名を表示


FormatDateTime 等を使して日付を文字列に変換する際,TFormatSettings.Create で英語のロケール ID を指定して取得した TFormatSettings の値を引数に指定すると英語表記にできます.
引数の TFormatSettings を指定しない場合は,グローバルなロケール ID が設定が使われます.


図6
FormatDateTime で英語表記

リスト3
//=============================================================================
//  書式指定で日付を表示
//  曜日名と月名を英語で表示
//  FormatDateTime を使用
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LFmtSet : TFormatSettings;
  LDate   : TDate;
  LFormat : string;
begin
  Memo1.Lines.Clear;

  LFmtSet := TFormatSettings.Create($0409);

  LFormat  := LFmtSet.LongDateFormat;
  LDate := EncodeDate(2020, 6, 5);

  Memo1.Lines.Add('Format : ' + LFormat);
  Memo1.Lines.Add('');

  Memo1.Lines.Add(FormatDateTime(LFormat, LDate));

  Memo1.Lines.Add(FormatDateTime(LFormat, LDate, LFmtSet));
end;

//=============================================================================
//  書式指定で日付を表示
//  曜日名と月名を英語で表示
//  DateTimeToString を使用
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LFmtSet : TFormatSettings;
  LDate   : TDate;
  LFormat : string;
  LText   : string;
begin
  Memo1.Lines.Clear;

  LFmtSet := TFormatSettings.Create($0409);

  LFormat  := LFmtSet.LongDateFormat;
  LDate := EncodeDate(2020, 6, 5);

  Memo1.Lines.Add('Format : ' + LFormat);
  Memo1.Lines.Add('');

  DateTimeToString(LText, LFormat, LDate);
  Memo1.Lines.Add(LText);

  DateTimeToString(LText, LFormat, LDate, LFmtSet);
  Memo1.Lines.Add(LText);
end;