繁体   English   中英

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

[英]Getting local timezone identifier when OS display language is non-english

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

TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZone);

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

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

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

要在不能使用TimeZoneInfo类的情况下获得等效的TimeZoneInfo.Local.Id ,您必须直接进入注册表。

在.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值,并在StandardName值中具有@tzres.dll指针条目。

在Windows Vista之前, StandardName值包含密钥名称,并且未本地化。

上面的代码说明了这两种变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM