获取Windows的语言环境格式

时间:2012-07-13 11:44:13

标签: windows delphi datetime

如何在Delphi中获取正确的Windows语言环境格式?

我试着做下一个

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

但如果将短日期格式设置为示例 '07 -13 \ 2012',则无法正常工作。 和变量相等

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

4 个答案:

答案 0 :(得分:1)

你可以用这个吗?

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

答案 1 :(得分:1)

实际上你应该将日期视为:

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

  1. 在领先" d"或" M"之前找到并获取所有内容。或" Y" (前缀)。

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

  3. 查找并结束第一个拆分器。

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

  5. 查找并结束第二个拆分器。

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

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

  8. 后:

    以当前格式字符串

    获取DAY,MONTH和YEAR的位置

答案 2 :(得分:0)

TFormatSettings.Create(Locale)的第一行是:

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

当我将LOCALE_SYSTEM_DEFAULT(2048)作为我的语言环境传递时,IsValidLocale返回false,GetThreadLocale返回4105(加拿大英语)。您可能希望进一步调查此问题。你得到了你期望的语言环境吗?

答案 3 :(得分:0)

国家/地区的正确语言格式

var
  formatSettings : TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatSettings);
  ShowMessage('LOCALE_SYSTEM_DEFAULT = ' + DateTimeToStr(now, formatSettings));

  GetLocaleFormatSettings(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), formatSettings);
  ShowMessage('LANG_ENGLISH = ' + DateTimeToStr(now, formatSettings));

  GetLocaleFormatSettings(MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT), formatSettings);
  ShowMessage('LANG_RUSSIAN = ' + DateTimeToStr(now, formatSettings));
end;
相关问题