如何在Delphi中为Windows获取正确的区域设置格式?获取Windows的区域设置格式
我试图做下一
LCID := 2048;
FormatSettings := TFormatSettings.Create(LCID);
但如果设置shortdate格式例如'07 -13 \ 2012',这并不正常工作。 和变量将等于
FormatSettings = 'MM/dd\yyyy' ?????
如何在Delphi中为Windows获取正确的区域设置格式?获取Windows的区域设置格式
我试图做下一
LCID := 2048;
FormatSettings := TFormatSettings.Create(LCID);
但如果设置shortdate格式例如'07 -13 \ 2012',这并不正常工作。 和变量将等于
FormatSettings = 'MM/dd\yyyy' ?????
您可以使用此?
var
formatSettings : TFormatSettings;
begin
// Furnish the locale format settings record
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatSettings);
// And use it in the thread safe form of CurrToStrF
ShowMessage('1234.56 formats as = '+
CurrToStrF(1234.56, ffCurrency, 4, formatSettings));
end;
http://www.delphibasics.co.uk/RTL.asp?Name=GetLocaleFormatSettings
该函数与我上面写的相同 过程GetLocaleFormatSettings(Locale:TLocaleID; var AFormatSettings:TFormatSettings); begin AFormatSettings:= TFormatSettings.Create(Locale); 结束; – YoungMaster 2012-07-13 11:56:43
TFormatSettings.Create(区域)的第一行是:
if not IsValidLocale(Locale, LCID_INSTALLED) then
Locale := GetThreadLocale;
当我通过LOCALE_SYSTEM_DEFAULT(2048),为我的区域设置,IsValidLocale返回false和GetThreadLocale返回4105(加拿大英语)。你可能想进一步调查。你是否得到你期待的语言环境?
@Young请不要对正在尝试帮助的人大喊大叫。你还没有得到满足你的答案的原因是你的问题很差。我意识到英语不是你的第一语言,但你必须更努力地解释你在做什么。我建议你编辑这个问题,花一些时间和精力来明确你想要达到的目标。 – 2012-07-13 15:27:34
其实你应该考虑日期为:
TShortDateFormatParts = (sdfpPrefix, sdfpDatePart1, sdfpSplitter1, sdfpDatePart2, sdfpSplitter2, sdfpDatePart3, sdfpSuffix);
在你的代码,你应该
:
查找和领先的 “d” 之前搞定一切,或 “M” 或 “Y” (字首)。
在第一个分离器之前查找并获取文本。
查找并获得第一个分离器的结尾。
在第二个分离器之前查找并获取文本。
查找并获得第二个分离器的结束。
查找并获取最终文本(后缀)前的所有内容。
得到了我们现在拥有的是最后一部分
后:
获取日,月,年的位置在当前格式字符串
而且会是什么'LCID'的价值是? – 2012-07-13 11:49:17
您正在尝试以非标准日期格式使用标准格式化例程。您给出的示例使用两个不同的日期分隔符。没有办法将其定义为适当的日期格式。剩下的,请使用Gerald的答案中的代码来获取系统的默认格式设置。 – 2012-07-13 12:52:18
你有什么需要使用这种非标准格式的原因吗?坚持标准格式不是更容易,还是你喜欢痛苦? ;-) – 2012-07-13 13:03:11