FindSystemTimeZoneById.UTC与GetSystemTimeZones UTC不同?

时间:2013-10-16 15:51:09

标签: c# .net timezone registry

我一直在寻找高低,无法找到答案。为什么TZI有所不同?

enter image description here

我在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。是什么给了???

1 个答案:

答案 0 :(得分:2)

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

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

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

所以你得到一个短名的预先出炉的。