首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateTime.Now与系统时间

DateTime.Now与系统时间
EN

Stack Overflow用户
提问于 2017-07-04 07:03:57
回答 1查看 4.9K关注 0票数 27

让我们想象一下这个小程序运行:

代码语言:javascript
复制
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上,我的实验表明,如果我重新启动应用程序,它将显示新的时区,但显示“旧”时间。新的时间将在重新启动系统后得到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-04 07:07:14

您可以检查下面的msdn 链接。它明确规定如下:

呼叫者注意事项:在首次使用CurrentTimeZone检索时区信息后,缓存本地时区数据。如果系统的本地时区随后发生更改,则CurrentTimeZone属性不会反映此更改。如果在应用程序运行时需要处理时区更改,请使用TimeZoneInfo类并调用其TimeZoneInfo.ClearCachedData方法。

在任何地方都有文档吗?是的,如前所述。

:为什么在应用程序运行时,时区更改没有被捕获?,因为时区信息是缓存的。

我可以做任何事情,以便应用程序在运行时获取时区更改?是的,方法是使用TimeZoneInfo类并调用它的TimeZoneInfo.ClearCachedData方法。

票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44899112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档