好吧,这很奇怪,但我创建了简单的UWP项目并在代码中添加了简单的一行:
IEnumerable<string> TimeZones = TimeZoneInfo.GetSystemTimeZones().Select(_ => _.DisplayName);
当我执行程序时,我得到了预期的结果:
>(UTC-11:00)世界协调时间-11“,
>(UTC-10:00)阿留申群岛“,
>(UTC-10:00)夏威夷“,
>(UTC-09:30)马克萨斯群岛“,
> ……
但如果我设置标志“使用.Net Native工具链编译”,我会得到:
> UTC-11
>阿留申标准时间
>夏威夷标准时间
>马克萨斯标准时间
> ……
是否有可能通过“使用.Net Native工具链编译”获得预期的行为?
解决方法:
感谢您报告此问题.
似乎在启用.Net Native工具链时,DisplayName属性将返回与StandardName属性相同的值.我在我们的系统中记录了这个问题.
作为解决方法,您可以将UTC偏移值与StandardName组合,如下所示:
var TimeZoneList=TimeZoneInfo.GetSystemTimeZones();
foreach(var i in TimeZoneList)
{
TimeSpan ts = i.GetUtcOffset(DateTime.Now);
if (ts.ToString().Contains("-"))
{
string s = "(UTC" + ts.ToString() + ")" + i.StandardName;
}
else
{
string s = "(UTC+" + ts.ToString() + ")" + i.StandardName;
}
}
谢谢.