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

时间:2011-09-21 21:38:59

标签: c# timezone

我已经编写了这个简单的控制台应用程序来测试我们使用set date time window在Windows 7上手动更改时区是否触发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);
    }

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

我错过了什么吗?

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

2 个答案:

答案 0 :(得分:11)

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

TimeZoneInfo.ClearCachedData();

将它放在DateTime.Now电话之前,看起来效果很好。 (无论如何,在我的机器上工作:)

编辑:正如评论中所述,似乎在某些案例中,您还需要调用CultureInfo.CurrentCulture.ClearCachedData()。我没有,但我敢说这样做没有坏处:)

答案 1 :(得分:0)

愚蠢的问题,但您要更改时间,还是只更改时区? 5:00是5:00,你改变时区(并通过扩展'移动'计算机提前一两个小时)的事实不会改变系统时钟设置为5:00的事实。 / p>