如何显示格式化的月份名称?
How to display formatted month names?
某些语言(例如捷克语或斯洛伐克语)会根据其使用上下文更改其拼写。但是 FormatDateTime
没有 Java 中的 SimpleDateFormat
那样多的选项,您可以在 MMMM
和独立表格 LLLL
之间切换月份。
我正在使用这种显示独立形式 30. leden 2019
而不是格式化形式 30. ledna 2019
的表示法。我想应该有一些 Windows 函数,但我找不到它,我想避免编写自己的库。
FormatDateTime('d. mmmm yyyy', Today);
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
变量,该变量在应用程序启动时使用当前用户的默认区域设置进行初始化。
某些语言(例如捷克语或斯洛伐克语)会根据其使用上下文更改其拼写。但是 FormatDateTime
没有 Java 中的 SimpleDateFormat
那样多的选项,您可以在 MMMM
和独立表格 LLLL
之间切换月份。
我正在使用这种显示独立形式 30. leden 2019
而不是格式化形式 30. ledna 2019
的表示法。我想应该有一些 Windows 函数,但我找不到它,我想避免编写自己的库。
FormatDateTime('d. mmmm yyyy', Today);
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
变量,该变量在应用程序启动时使用当前用户的默认区域设置进行初始化。