FormatDateTime の 月の省略表示

解決


Tatsu  2011-10-19 20:55:36  No: 41053  IP: 192.*.*.*

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-19 22:39:14  No: 41054  IP: 192.*.*.*

ロケールの情報を参照するので、日本語環境で実行した場合は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-20 15:05:21  No: 41055  IP: 192.*.*.*

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

編集 削除