首页 文章

为什么FindSystemTimeZoneById找不到GetSystemTimeZones返回的某些时区?

提问于
浏览
11

我似乎已经解决了 . 当我在Win 7 x64机器上调用 TimeZoneInfo.GetSystemTimeZones 时,我得到101个结果 . 当我在每个上面调用 TimeZoneInfo.FindSystemTimeZoneById 并传递TimeZoneInfo对象的StandardName属性时,其中3个抛出TimeZoneNotFoundException .

这是一个示例:

var tzs = TimeZoneInfo.GetSystemTimeZones();

foreach (var timeZoneInfo in tzs.OrderBy(t => t.BaseUtcOffset))
{
  try
  {
    TimeZoneInfo.FindSystemTimeZoneById(timeZoneInfo.StandardName);
  }
  catch (TimeZoneNotFoundException)
  {
    Console.WriteLine(timeZoneInfo.DisplayName + "|" + timeZoneInfo.StandardName + "|" + timeZoneInfo.BaseUtcOffset);
  }
}

Console.ReadLine();

这很难找到“协调世界时”,“耶路撒冷标准时间”和“马来半岛标准时间” . 以马来西亚为例,当我查看区域设置中的可用时区时,我可以看到它的条目,尽管它显示的是DisplayName属性而不是StandardName:

Time zones

但是,在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones中浏览注册表时,我无法在任何名称下看到它

这里发生了什么?为什么不能用名字装马来西亚时区?

请不要使用其他库来实现其他时区实现 - 我只是想暂时解决这个问题 . 谢谢!

1 回答

相关问题