如何在WinRT中清除TimeZoneInfo缓存?

时间:2015-12-15 21:51:24

标签: .net windows-runtime timezone uwp

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

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

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

1 个答案:

答案 0 :(得分:5)

有一种无证实现的方法,as seen here in the .NET reference source

for /f %%F in (C:\IPLIST.txt) do (
    pstools\psexec.exe \%%F -u administrator -p password net user administrator password1
    if !errorlevel! NEQ 0 pstools\psexec.exe \%%F -u administrator -p password3 net user administrator password2
)

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

据微软.NET团队的同事们说,这是针对已知问题的非正式解决方法。它不会被删除,但它是一个实现细节,而不是公共API的一部分,因此使用风险自负。

请注意,当TimeZoneInfo.ConvertTime(new DateTime(0), TimeZoneInfo.Utc); 可用时,应使用TimeZoneInfo.ClearCachedData代替此方法。它被添加到.NET Standard 2.0和UWP 10.1(see all environments here)。