如何清除 WinRT 中的 TimeZoneInfo 缓存?
How to clear TimeZoneInfo cache in WinRT?
在 .NET 中,TimeZoneInfo
使用的一些值被缓存,例如 TimeZoneInfo.Local
、DateTime.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)。
在 .NET 中,TimeZoneInfo
使用的一些值被缓存,例如 TimeZoneInfo.Local
、DateTime.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)。