关于.net:如何在WinRT中清除TimeZoneInfo缓存?

How to clear TimeZoneInfo cache in WinRT?

在.NET中,TimeZoneInfo使用的某些值被缓存,例如TimeZoneInfo.LocalDateTime.ToLocalTime等使用的当前时区。在传统的.NET框架应用程序中,可以通过调用TimeZoneInfo.ClearCachedData()清除此缓存, 正如文档中所解释的那样。

但是,在WinRT应用程序(如Windows应用商店应用程序和Windows Universal Apps)中,ClearCachedData API不可用。

如何清除WinRT环境中的时区缓存?


有一种未记录的方法可以实现这一点,如.NET参考源中所示。

1
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(请参阅此处的所有环境)。