FormatDateTime の 月の省略表示

解決


Tatsu  2011-10-20 05:55:36  No: 41053

Windows7 DelphiXE2です。
日付 d1 = 2011年1月10日を 'jan.10,2011'と表示したくて
Label1.Caption := FormatDateTime('mmm.d.yyyy', d1)
としたところ 「1.10,2011」と表示されます。
どうしたらいいんでしょうか。
ちなみに
Label1.Caption := FormatDateTime('mmmm.d,yyyy', d1)とすると
としたところ 「1月.10,2011」と表示されます。


au  2011-10-20 07:39:14  No: 41054

ロケールの情報を参照するので、日本語環境で実行した場合は1月又は1になるのでしょう。
英語の月の短縮名を使う場合は、FormatDateTimeの第3引数のAFormatSettingsに英語ロケールの情報を渡す必要があるかと。

こんな感じでしょうか
procedure TForm1.Button1Click(Sender: TObject);
var
  fmt: TFormatSettings;
begin
// TFormatSettings.Createにstringが渡せるなら上の初期化で良いでしょうし、Stringが渡せないなら下側の初期化を使ってください
  fmt := TFormatSettings.Create('en-US');
//  fmt := TFormatSettings.Create(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT));
  ShowMessage(FormatDateTime('mmm.d.yyyy', Now, Fmt));
end;


Tatsu  2011-10-21 00:05:21  No: 41055

auさんありがとうございました。 できました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加