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

How to display formatted month names?

某些语言(例如捷克语或斯洛伐克语)会根据其使用上下文更改其拼写。但是 FormatDateTime 没有 Java 中的 SimpleDateFormat 那样多的选项,您可以在 MMMM 和独立表格 LLLL 之间切换月份。

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

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

GetDateFormat

var
  DateStr: array[byte] of Char;

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

对于俄语语言环境,此 returns 正确短语:31 января 2019 г。 (非主格 январь

GetDateFormat(5, DATE_LONGDATE, nil, nil, DateStr, 256);

对于捷克语言环境 LCID=5 它 returns 31. ledna 2019

FormatDateTime() has an overload that takes a TFormatSettings as input, which has ShortMonthNames and LongMonthNames 您可以根据需要自定义的成员(以及许多其他成员)。在您的示例中,您需要 LongMonthNames.

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

var
  fmt: TFormatSettings;

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

如果您根本没有指定任何 TFormatSettings,则会使用全局 SysUtils.FormatSettings 变量,该变量在应用程序启动时使用当前用户的默认区域设置进行初始化。