我似乎已经解决了 . 当我在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:
但是,在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones中浏览注册表时,我无法在任何名称下看到它
这里发生了什么?为什么不能用名字装马来西亚时区?
请不要使用其他库来实现其他时区实现 - 我只是想暂时解决这个问题 . 谢谢!
1 回答
TimeZoneInfo.FindSystemTimeZoneById方法接受时区id作为参数 . 你正在使用
timeZoneInfo.StandardName
.看来,对于这三个区域,TimeZoneInfo.StandardName和TimeZoneInfo.Id属性的值是不同的 . 使用这个:
将解决问题 .