0

DelphiでWindowsの正しいロケール形式を取得するにはどうすればよいですか?

次にやろうとしています

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

ただし、例「07-13 \ 2012」のようにshortdate形式を設定すると、これは正常に機能しません。変数は等しくなります

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

4

4 に答える 4

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

于 2012-07-13T11:55:00.893 に答える
1

実際には、日付を次のように考慮する必要があります。

TShortDateFormatParts = (sdfpPrefix, sdfpDatePart1, sdfpSplitter1, sdfpDatePart2, sdfpSplitter2, sdfpDatePart3, sdfpSuffix);

あなたのコードでは、次のことを行う必要があります。

  1. "d"、"M"、または "Y" (プレフィックス) の前にあるものをすべて検索して取得します。

  2. 最初のスプリッターの前にテキストを検索して取得します。

  3. 最初のスプリッターの終わりを見つけて取得します。

  4. 2 番目のスプリッターの前にテキストを検索して取得します。

  5. 2 番目のスプリッターの終わりを見つけて取得します。

  6. 最終テキスト (接尾辞) より前のすべてを検索して取得します。

  7. 私たちが今持っているものを手に入れて、最終的な部分です

後:

現在のフォーマット文字列で、DAY、MONTH、および YEAR の位置を取得します

于 2016-05-26T10:35:46.477 に答える
0

TFormatSettings.Create(Locale) の最初の行は次のとおりです。

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

LOCALE_SYSTEM_DEFAULT (2048) をロケールとして渡すと、IsValidLocale は false を返し、GetThreadLocale は 4105 (カナダ英語) を返します。これをさらに調査することをお勧めします。期待どおりのロケールを取得していますか?

于 2012-07-13T13:50:57.540 に答える