从3月7日开始,东南亚地区的Azure服务器应用了一个补丁,改变了.NET中TimeZoneInfo的行为.
将我的本地计算机设置为"(UTC)协调世界时",然后运行以下代码产生"UTC":
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(TimeZoneInfo.Local.Id);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
远程登录到我们的一个Azure实例并运行同一个应用程序会产生以下结果:
"协调世界时"
根据.NET文档,这是StandardName属性应返回的值,而不是Id属性.我们将此值传递给TimeZoneInfo.FindSystemTimeZoneById(),并且由于"Coordinated Universal Time"不是有效的Id("UTC"),它会失败.此时区是其中StandardName属性与Id属性不匹配的3个时区之一.
在3月7日之前,Azure实例始终返回正确的值"UTC".我们暂时硬编码"UTC"作为权宜之计解决方案.
有没有人知道为什么这会改变这种方式,处理这种情况的适当的长期解决方案是什么?