2012-07-13 69 views
0

如何在Delphi中为Windows获取正确的区域设置格式?获取Windows的区域设置格式

我试图做下一

LCID := 2048;  
FormatSettings := TFormatSettings.Create(LCID); 

但如果设置shortdate格式例如'07 -13 \ 2012',这并不正常工作。 和变量将等于

FormatSettings = 'MM/dd\yyyy' ?????

+0

而且会是什么'LCID'的价值是? – 2012-07-13 11:49:17

+0

您正在尝试以非标准日期格式使用标准格式化例程。您给出的示例使用两个不同的日期分隔符。没有办法将其定义为适当的日期格式。剩下的,请使用Gerald的答案中的代码来获取系统的默认格式设置。 – 2012-07-13 12:52:18

+0

你有什么需要使用这种非标准格式的原因吗?坚持标准格式不是更容易,还是你喜欢痛苦? ;-) – 2012-07-13 13:03:11

回答

0

您可以使用此?

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

+0

该函数与我上面写的相同 过程GetLocaleFormatSettings(Locale:TLocaleID; var AFormatSettings:TFormatSettings); begin AFormatSettings:= TFormatSettings.Create(Locale); 结束; – YoungMaster 2012-07-13 11:56:43

0

TFormatSettings.Create(区域)的第一行是:

if not IsValidLocale(Locale, LCID_INSTALLED) then 
    Locale := GetThreadLocale; 

当我通过LOCALE_SYSTEM_DEFAULT(2048),为我的区域设置,IsValidLocale返回false和GetThreadLocale返回4105(加拿大英语)。你可能想进一步调查。你是否得到你期待的语言环境?

+0

@Young请不要对正在尝试帮助的人大喊大叫。你还没有得到满足你的答案的原因是你的问题很差。我意识到英语不是你的第一语言,但你必须更努力地解释你在做什么。我建议你编辑这个问题,花一些时间和精力来明确你想要达到的目标。 – 2012-07-13 15:27:34

1

其实你应该考虑日期为:

TShortDateFormatParts = (sdfpPrefix, sdfpDatePart1, sdfpSplitter1, sdfpDatePart2, sdfpSplitter2, sdfpDatePart3, sdfpSuffix); 
在你的代码,你应该

  1. 查找和领先的 “d” 之前搞定一切,或 “M” 或 “Y” (字首)。

  2. 在第一个分离器之前查找并获取文本。

  3. 查找并获得第一个分离器的结尾。

  4. 在第二个分离器之前查找并获取文本。

  5. 查找并获得第二个分离器的结束。

  6. 查找并获取最终文本(后缀)前的所有内容。

  7. 得到了我们现在拥有的是最后一部分

后:

获取日,月,年的位置在当前格式字符串