诸如捷克语或斯洛伐克语之类的某些语言会根据其用法来更改其拼写。但是,FormatDateTime
在Java中没有SimpleDateFormat
那样多的选项,您可以在格式化的MMMM
和本月的独立格式LLLL
之间进行切换。
我正在使用这种表示法,它显示独立的格式30. leden 2019
,而不是格式化的格式30. ledna 2019
。我想应该有一些Windows函数,但是我找不到它,我想避免编写自己的库。
FormatDateTime('d. mmmm yyyy', Today);
答案 0 :(得分:6)
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
作为输入,其中包含ShortMonthNames
和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
,该变量在应用程序启动时使用当前用户的默认语言环境进行初始化。