如何清除 WinRT 中的 TimeZoneInfo 缓存?

How to clear TimeZoneInfo cache in WinRT?

在 .NET 中,TimeZoneInfo 使用的一些值被缓存,例如 TimeZoneInfo.LocalDateTime.ToLocalTime 等使用的当前时区。在传统的 .NET 框架应用程序中,这个缓存可以通过调用 TimeZoneInfo.ClearCachedData() 来清除,如 explained in the docs.

但是,在 WinRT 应用程序中,例如 Windows Store apps 和 Windows Universal Apps,ClearCachedData API 不可用。

如何在 WinRT 环境下清除时区缓存?

有一种未记录的方法可以实现此目的,as seen here in the .NET reference source

TimeZoneInfo.ConvertTime(new DateTime(0), TimeZoneInfo.Utc);

这将清除时区缓存,它适用于 WinRT 以及传统的 .NET Framework (4.6+)、.NET Core 和 PCL。

根据我在 Microsoft .NET 团队的同事的说法,这是针对已知问题的非官方解决方法。它预计不会被删除,但它是一个实现细节而不是 public API 的一部分,因此使用风险自负。

请注意,如果可用,应使用 TimeZoneInfo.ClearCachedData 代替此方法。它已添加到 .NET Standard 2.0 和 UWP 10.1 (see all environments here)。