如何在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