让我们假设这个小程序运行:
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 IOT上,我的实验表明,如果我重新启动应用程序,它将显示新的时区,但是“旧”时间。重新启动系统后将获取新时间。
答案 0 :(得分:41)
您可以查看以下msdn link。它清楚地说明了以下内容:
呼叫者注意事项:在CurrentTimeZone之后缓存本地时区数据 首先用于检索时区信息。如果系统是本地的 时区随后更改,CurrentTimeZone属性不会 反映这种变化。如果您需要处理时区更改 您的应用程序正在运行,请使用TimeZoneInfo类并调用它 TimeZoneInfo.ClearCachedData方法。
是否记录在任何地方? 是的,如上所述。
为什么在应用程序运行时没有获得时区更改? 因为时区信息是缓存的。
我可以做任何事情,以便应用程序在运行时选择时区更改吗? 是的,通过使用TimeZoneInfo类并调用其TimeZoneInfo.ClearCachedData方法。