让我们想象一下这个小程序运行:
while (true)
{
Console.WriteLine($"{DateTime.UtcNow} -> {DateTime.Now} tz={TimeZone.CurrentTimeZone.StandardName} / {TimeZoneInfo.Local.StandardName}");
await Task.Delay(TimeSpan.FromSeconds(1));
}当我更改系统的时区时,当程序运行时,应用程序不会看到更改。时区和时间就好像时区没有改变一样。
为了使应用程序显示新的时间和时区,我需要重新启动应用程序。
如果我更改系统时间,则会立即获取时间更改。
如果你能帮我回答三个问题,那就太好了:
这里有一个小屏幕截图来显示.NET应用程序使用的时间与操作系统不同:

顺便说一下。在Raspberry Pi上的Windows上,我的实验表明,如果我重新启动应用程序,它将显示新的时区,但显示“旧”时间。新的时间将在重新启动系统后得到。
发布于 2017-07-04 07:07:14
您可以检查下面的msdn 链接。它明确规定如下:
呼叫者注意事项:在首次使用CurrentTimeZone检索时区信息后,缓存本地时区数据。如果系统的本地时区随后发生更改,则CurrentTimeZone属性不会反映此更改。如果在应用程序运行时需要处理时区更改,请使用TimeZoneInfo类并调用其TimeZoneInfo.ClearCachedData方法。
在任何地方都有文档吗?是的,如前所述。
:为什么在应用程序运行时,时区更改没有被捕获?,因为时区信息是缓存的。
我可以做任何事情,以便应用程序在运行时获取时区更改?是的,方法是使用TimeZoneInfo类并调用它的TimeZoneInfo.ClearCachedData方法。
https://stackoverflow.com/questions/44899112
复制相似问题