2012-07-13 117 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. 得到了我們現在擁有的是最後一部分

後:

獲取日,月,年的位置在當前格式字符串

相關問題