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 回答