OS显示语言为非英语时获取本地时区标识符

时间:2013-09-23 00:55:20

标签: c# .net timezone

奇怪的是,TimeZone.CurrentTimeZone.StandardName按照计算机显示语言返回本地化名称。我想要一个程序化标识符,我可以在以下代码中为TimeZoneInfo提供。

TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZone);

FindSystemTimeZoneById需要一个独特的非本地化程序标识符

我将计算机显示语言改为中文,当我TimeZone.CurrentTimeZone.StandardName时,我得到了一个本地化的unicode字符串。然而,价值是正确的,但它本地化在计算机显示语言中,这是我不想要的。

我现在没有使用TimeZoneInfo.Local.Id的选项,因为我的项目是在.Net 2.0中。我还有什么其他选择来获取非本地化的时区标识符?

1 个答案:

答案 0 :(得分: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值包含密钥名称,并且未进行本地化。

以上代码说明了这两种变体。