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