1

我一直在寻找高低,找不到答案。为什么 TZI 不一样?

在此处输入图像描述

我在 MSDN 上做了一些挖掘并看到了这个:http: //msdn.microsoft.com/en-us/library/system.timezoneinfo.findsystemtimezonebyid.aspx

其中明确指出:

FindSystemTimeZoneById 尝试将 id 与 Windows XP 和 Windows Vista 下注册表的 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 分支的子项名称匹配。此分支不一定包含时区标识符的完整列表。

所以我认为这意味着它每次都会进入注册表?

但这使问题变得混乱:http: //msdn.microsoft.com/en-us/library/system.timezoneinfo.utc.aspx

并说:

这是一个内置对象;不会从注册表中检索有关此 TimeZoneInfo 对象的信息。

所以看起来我的调用FindSystemTimeZoneById()实际上是短路并返回 TimeZoneInfo.UTC,而不是去注册表!这不是主意,因为我想要其他版本的 DisplayName。是什么赋予了???

4

1 回答 1

2

由于您搜索时区的不同方式,解释了这个怪癖。具有全名的顶部来自注册表,并由您使用 GetSystemTimeZones() 开始,它枚举注册表项。

底部是由 FindSystemTimeZoneById() 生成的,它有一个快捷方式:

public static TimeZoneInfo FindSystemTimeZoneById(string id)
{
    if (string.Compare(id, "UTC", StringComparison.OrdinalIgnoreCase) == 0)
    {
        return Utc;
    }
    // etc..
}

所以你会得到一个带有短名称的预烘焙。

于 2013-10-16T16:54:34.293 回答