tym*_*tam 26 .net c# windows time
让我们假设这个小程序运行:
while (true)
{
Console.WriteLine($"{DateTime.UtcNow} -> {DateTime.Now} tz={TimeZone.CurrentTimeZone.StandardName} / {TimeZoneInfo.Local.StandardName}");
await Task.Delay(TimeSpan.FromSeconds(1));
}
Run Code Online (Sandbox Code Playgroud)
当我在程序运行时更改系统的时区时,应用程序看不到更改.时区和时间就好像时区没有改变.
为了让应用程序显示新的时间和时区,我需要重新启动应用程序.
如果我更改系统时间,则会立即获取时间更改.
如果你能帮我解决三个问题,那将是很棒的:
这是一个使用与操作系统不同的时间显示.NET应用程序的屏幕截图:

BTW.在Raspberry Pi上的Windows IOT上,我的实验表明,如果我重新启动应用程序,它将显示新的时区,但是"旧"时间.重新启动系统后将获取新时间.
Har*_*rsh 41
您可以查看以下msdn 链接.它清楚地说明了以下内容:
呼叫者注意事项:首次使用CurrentTimeZone检索时区信息后,将缓存本地时区数据.如果系统的本地时区随后发生更改,则CurrentTimeZone属性不会反映此更改.如果需要在应用程序运行时处理时区更改,请使用TimeZoneInfo类并调用其TimeZoneInfo.ClearCachedData方法.
这在任何地方记录? 是的,如上所述.
为什么在应用程序运行时不会发现时区变化? 因为时区信息是缓存的.
我可以做任何事情,以便应用程序在运行时获取时区更改吗? 是的,通过使用TimeZoneInfo类并调用其TimeZoneInfo.ClearCachedData方法.