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

Windows 如何显示格式化的月份名称?,windows,delphi,winapi,delphi-10.2-tokyo,Windows,Delphi,Winapi,Delphi 10.2 Tokyo,一些语言,如捷克语或斯洛伐克语,会根据其使用情况改变拼写。但是,Java中的FormatDateTime没有SimpleDateFormat那么多选项,您可以在格式化的MMMM和当月的独立表单LLLL之间切换 我使用这个符号来显示独立的表单30。leden 2019而不是格式化形式30。莱德纳2019。我想应该有一些Windows函数,但我找不到它,我想避免编写自己的库 FormatDateTime('d. mmmm yyyy', Today); 对于俄语语言环境,这将返回正确的短语:31а

一些语言,如捷克语或斯洛伐克语,会根据其使用情况改变拼写。但是,Java中的
FormatDateTime
没有
SimpleDateFormat
那么多选项,您可以在格式化的
MMMM
和当月的独立表单
LLLL
之间切换

我使用这个符号来显示独立的表单
30。leden 2019
而不是格式化形式
30。莱德纳2019
。我想应该有一些Windows函数,但我找不到它,我想避免编写自己的库

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

对于俄语语言环境,这将返回正确的短语:31аааа2019Γ。(非主格
ааааа

对于捷克语地区
LCID=$405
它返回
31。ledna 2019

有一个重载,该重载将a作为输入,其中包含和成员,您可以根据需要进行自定义(除其他外)。在您的示例中,您需要
LongMonthNames

您可以构造
t格式设置
来指定所需的区域设置:

var
  fmt: TFormatSettings;

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

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

谢谢,我知道这一点,但如果我没有弄错的话,它总是只加载一个独立的表单,如果我想使用一个格式化的表单,我必须创建自己的表单,除了更改格式设置之外,仍然无法在它们之间切换。@Triber如我所说,您可以根据需要自定义
t格式设置
,然后将其传递到
FormatDateTime()
。因此,根据使用返回字符串的上下文,可以根据需要预加载不同的月份名称。
GetDateFormat($405, DATE_LONGDATE, nil, nil, DateStr, 256);
var
  fmt: TFormatSettings;

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