在.NET中使用的一些值TimeZoneInfo
被缓存,如当前使用的时区TimeZoneInfo.Local
,DateTime.ToLocalTime
等等.在传统的.NET架构的应用程序,该缓存可以通过调用被清除TimeZoneInfo.ClearCachedData()
,如在文档解释.
但是,在WinRT应用程序(如Windows应用商店应用程序和Windows Universal Apps)中,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(请参阅此处的所有环境).