如何显示格式化的月份名称?

时间:2019-01-30 17:37:02

标签: windows delphi winapi delphi-10.2-tokyo

诸如捷克语或斯洛伐克语之类的某些语言会根据其用法来更改其拼写。但是,FormatDateTime在Java中没有SimpleDateFormat那样多的选项,您可以在格式化的MMMM和本月的独立格式LLLL之间进行切换。

我正在使用这种表示法,它显示独立的格式30. leden 2019,而不是格式化的格式30. ledna 2019。我想应该有一些Windows函数,但是我找不到它,我想避免编写自己的库。

FormatDateTime('d. mmmm yyyy', Today);

2 个答案:

答案 0 :(得分:6)

GetDateFormat

var
  DateStr: array[byte] of Char;

begin
   GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, nil, nil, DateStr, 256);
   Writeln(DateStr);

对于俄语语言环境,这将返回正确的短语:31января 2019年。 (不是主格январь

GetDateFormat($405, DATE_LONGDATE, nil, nil, DateStr, 256);

对于捷克语言环境LCID=$405,它返回31. ledna 2019

答案 1 :(得分:2)

FormatDateTime()具有一个重载,该重载以一个TFormatSettings作为输入,其中包含ShortMonthNamesLongMonthNames个成员,您可以根据需要自定义它们(包括许多其他成员)。在您的示例中,您需要LongMonthNames

您可以构造一个TFormatSettings来指定所需的语言环境:

var
  fmt: TFormatSettings;

fmt := TFormatSettings.Create(...); //specify desired locale...
// customize fmt as needed...
FormatDateTime('d. mmmm yyyy', Today, fmt);

如果根本不指定任何TFormatSettings,则使用全局变量SysUtils.FormatSettings,该变量在应用程序启动时使用当前用户的默认语言环境进行初始化。