我一直在寻找高低,无法找到答案。为什么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。是什么给了???
答案 0 :(得分:2)
由于您搜索时区的方式不同,因此解释了这个怪癖。顶部的全名来自注册表并由您使用GetSystemTimeZones()开始生活,它枚举了注册表项。
底部的一个是由FindSystemTimeZoneById()生成的,它有一个捷径:
public static TimeZoneInfo FindSystemTimeZoneById(string id)
{
if (string.Compare(id, "UTC", StringComparison.OrdinalIgnoreCase) == 0)
{
return Utc;
}
// etc..
}
所以你得到一个短名的预先出炉的。