在.NET中,TimeZoneInfo
使用的一些值会被缓存,例如TimeZoneInfo.Local
、DateTime.ToLocalTime
等使用的当前时区。在传统的.NET框架应用程序中,可以通过调用TimeZoneInfo.ClearCachedData()
来清除此缓存,如文档中所述。
但是,在WinRT应用程序(如Windows应用商店应用程序和Windows通用应用程序)中,ClearCachedData
API不可用。
如何在WinRT环境中清除时区缓存?
有一种未记录的方法可以实现这一点,如.NET参考源中所示。
TimeZoneInfo.ConvertTime(new DateTime(0), TimeZoneInfo.Utc);
这将清除时区缓存,它适用于WinRT以及传统的.NET Framework(4.6+)、.NET Core和PCL。
根据我在微软.NET团队的同事们的说法,这是一个非官方的解决已知问题的方法。它预计不会被删除,但它是一个实现细节,而不是公共API的一部分,因此使用风险自负。
请注意,当TimeZoneInfo.ClearCachedData
可用时,应使用它来代替此方法。它被添加到.NET Standard 2.0和UWP 10.1中(请参阅此处的所有环境)。