gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:22:09 37 4
gpt4 key购买 nike

我遇到了一个似乎无法解决的奇怪问题。当我在我的 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 浏览注册表时,我在任何一个名称下都看不到它

这是怎么回事?为什么不能按名称加载马来西亚时区?

请不要使用其他库来实现替代时区 - 我现在只想深入了解这个问题。谢谢!

最佳答案

TimeZoneInfo.FindSystemTimeZoneById方法接受时区 ID 作为参数。您正在使用 timeZoneInfo.StandardName

看来,对于这 3 个区域,TimeZoneInfo.StandardName 的值和 TimeZoneInfo.Id属性不同。使用这个:

TimeZoneInfo.FindSystemTimeZoneById(timeZoneInfo.Id);

将解决问题。

关于c# - 为什么 FindSystemTimeZoneById 找不到 GetSystemTimeZones 返回的某些时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225701/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com