在.NET中,TimeZoneInfo
使用的某些值被缓存,例如TimeZoneInfo.Local
,DateTime.ToLocalTime
等使用的当前时区。在传统的.NET框架应用程序中,此缓存可以通过调用TimeZoneInfo.ClearCachedData()
清除explained in the docs。
但是,在WinStT应用程序(如Windows应用商店应用和Windows Universal Apps)中,ClearCachedData
API不可用。
如何在WinRT环境中清除时区缓存?
答案 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)。