Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】日付の標準フォーマット

今回はDelphi/400での日付の標準フォーマットについてご説明いたします。

Delphi/400のアプリケーションで日付形式を表示をする場合、
通常は “YYYY/MM/DD” のフォーマット形式で表示されます。

これは実行するPC上のシステム値に基づいて自動で設定されますので、
同じアプリケーションを実行しても、
PCの設定が “YYYY/MM/DD” となっていない場合、
“MM/DD/YYYY” 等の別形式で表示されてしまう場合があります。

このPCのシステム値は、コントロールパネルの「地域と日付」で設定されている
「日付(短い形式)」が使用されます。
または同設定画面の「追加の設定」部分での設定値が使用されます。

PCの設定によって、こうした形式に左右されないようにプログラムで対応する場合、
Delphi上で保持しているShortDateFormatを利用することができます。
(※Delphi XE3以降では、デフォルトの書式設定がFormatSettings
  集約されたため、FormatSettings.ShortDateFormat のように記述します。)

 

例えば、次のようにCreate時にShortDateFormatをプログラムで固定セットすることで
環境に依存しない日付表示形式を維持することができます。

//例)フォームのCreateイベント
procedure TForm1.FormCreate(Sender: TObject);
begin
  FormatSettings.ShortDateFormat := 'yyyy/mm/dd';  // 形式を固定でセット
end;

 

また、ShortDateFormat 以外にも書式設定の変数には以下のようなものがあります。
それぞれ、値を代入することで実行中EXEに限った設定変更が可能です。

procedure TForm1.Button1Click(Sender: TObject);
begin
  // デフォルトのFormatSettingsで現在日時を表示(右のコメントは表示される文字列の例)
  ShowMessage(FormatDateTime(FormatSettings.ShortDateFormat, Now)); // 2023/05/16
  ShowMessage(FormatDateTime(FormatSettings.LongDateFormat, Now));  // 2023年5月16日
  ShowMessage(FormatDateTime(FormatSettings.TimeAMString, Now));    // 午前
  ShowMessage(FormatDateTime(FormatSettings.TimePMString, Now));    // 午後
  ShowMessage(FormatDateTime(FormatSettings.ShortTimeFormat, Now)); // 10:18
  ShowMessage(FormatDateTime(FormatSettings.LongTimeFormat, Now));  // 10:18:58

  // FormatSettingsを変更(変更はEXE終了時まで有効)
  FormatSettings.ShortDateFormat := 'ge/m/d';
  FormatSettings.LongDateFormat  := 'ggee年mm月dd日';
  FormatSettings.LongTimeFormat  := 'hh時nn分ss秒ですわよ!';

  // 変更されたFormatSettingsで現在日時を表示
  ShowMessage(FormatDateTime(FormatSettings.ShortDateFormat, Now)); // 令5/5/16
  ShowMessage(FormatDateTime(FormatSettings.LongDateFormat, Now));  // 令和05年05月16日
  ShowMessage(FormatDateTime(FormatSettings.LongTimeFormat, Now));  // 10時19分05秒ですわよ!
end;

 

 


<関連TIPS記事

【Delphi】日付や時刻に関する関数(MIGARO. 技術Tips)

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.162 2014年5月号より)