3

奇妙なことに、TimeZone.CurrentTimeZone.StandardNameコンピューターの表示言語ごとにローカライズされた名前を返します。TimeZoneInfo次のコードで提供できるプログラム識別子が必要です。

TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZone);

FindSystemTimeZoneByIdローカライズされていない一意のプログラム識別子が必要です

コンピューターの表示言語を中国語に変更したところ、ローカライズされた Unicode 文字列が表示されましたTimeZone.CurrentTimeZone.StandardName。ただし、値は正しかったのですが、コンピューターの表示言語にローカライズされていました。これは望ましくありません。

TimeZoneInfo.Local.Id私のプロジェクトは .Net 2.0 にあるため、現在使用するオプションはありません。ローカライズされていないタイムゾーン識別子を取得するには、他にどのようなオプションが必要ですか?

4

1 に答える 1

2

TimeZoneInfo.Local.Idクラスを使用できない場合と同等のものを取得するTimeZoneInfoには、レジストリに直接アクセスする必要があります。

.NET 2.0 C# では、次の方法で取得できます。

private static string GetLocalTimeZoneId()
{
    RegistryKey key = Registry.LocalMachine.OpenSubKey(
                        @"SYSTEM\CurrentControlSet\Control\TimeZoneInformation");
    string value = (string)key.GetValue("TimeZoneKeyName");
    if (string.IsNullOrEmpty(value))
        value = (string)key.GetValue("StandardName");
    key.Close();
    return value;
}

Windows Vista 以降には値があり、TimeZoneKeyName値に@tzres.dllポインター エントリがありStandardNameます。

Windows Vista より前は、StandardName値にキー名が含まれており、ローカライズされていませんでした。

上記のコードは、両方のバリエーションを考慮しています。

于 2013-09-23T01:49:40.367 に答える