应用程序在重新启动之前不会看到系统时区更改

时间:2014-04-30 16:46:52

标签: c# windows datetime time timezone

我觉得这是一个非常简单的问题,之前有人必须遇到过这个问题。要么我不能提出正确的搜索关键词,要么没有人真正遇到过这个问题。

我的问题是,当我进入Windows系统时间并更改时区时,系统托盘时间会相应更新,但我正在运行的应用程序似乎完全忘记了这一事实。我尝试过的.NET对象似乎都没有反映出系统时区已被更改的事实。我之前和之后都检查了以下对象,看看它们是否发生了变化而不是:

DateTime.Now;
DateTime.Now.Offset;
TimeZone.CurrentTimeZone.StandardName;

对于我来说,这是一个非常简单的情况,时区会在应用程序的相同电源周期中发生变化,但是,我必须解决它。有没有办法告诉.NET框架"刷新你的时区"还是什么?

1 个答案:

答案 0 :(得分:10)

查看该属性的文档:

http://msdn.microsoft.com/en-us/library/system.timezone.currenttimezone(v=vs.110).aspx

  

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

TimeZoneInfo local = TimeZoneInfo.Local;

TimeZoneInfo.ClearCachedData();
local = TimeZoneInfo.Local; //updated local time zone info