SystemEvent.TimeChange显示相同的时间甚至时区更改

use*_*014 8 c# timezone

我写了这个简单的控制台应用程序来测试我们在Windows 7上使用set date time window手动更改时区是否触发timechange事件?答案是肯定它已触发,但我打印当前时间未正确显示..

    static void Main(string[] args)
    {
        SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
        Console.Read();
    }

    static void SystemEvents_TimeChanged(object sender, EventArgs e)
    {
        Console.WriteLine(DateTime.Now);
    }
Run Code Online (Sandbox Code Playgroud)

一旦你运行控制台应用程序,然后尝试更改时区它总是反映一次更改,但它会以某种方式坚持到那个时间,即使你将时区更改为不同的时区或相同.

我错过了什么吗?

验证系统时间是否已更改我已打开命令提示符并使用日期和"时间"命令打印当前时间,根据时区显示完美.

Jon*_*eet 11

我相信正在缓存系统时区.您可以清除此缓存:

TimeZoneInfo.ClearCachedData();
Run Code Online (Sandbox Code Playgroud)

把它放在你的DateTime.Now电话之前,看起来它工作正常.(无论如何,在我的机器上工作:)

编辑:如评论中所述,似乎在某些情况下您还需要打电话CultureInfo.CurrentCulture.ClearCachedData().我没有,但我敢说这样做没有坏:)

  • 另外别忘了把CultureInfo.CurrentCulture.ClearCachedData(); 在TimeZoneInfo.ClearCacheData()之前; (2认同)