我已经编写了这个简单的控制台应用程序来测试我们使用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);
}
一旦你运行控制台应用程序,然后尝试更改时区,它总是反映一次更改,但即使你将时区更改为不同的时区或相同的时间,它也会以某种方式停留在那个时间。
我错过了什么吗?
验证系统时间是否已更改我已打开命令提示符并使用日期和'时间'命令打印当前时间,根据时区显示完美。
答案 0 :(得分:11)
我相信正在缓存系统时区。您可以清除此缓存:
TimeZoneInfo.ClearCachedData();
将它放在DateTime.Now
电话之前,看起来效果很好。 (无论如何,在我的机器上工作:)
编辑:正如评论中所述,似乎在某些案例中,您还需要调用CultureInfo.CurrentCulture.ClearCachedData()
。我没有,但我敢说这样做没有坏处:)
答案 1 :(得分:0)
愚蠢的问题,但您要更改时间,还是只更改时区? 5:00是5:00,你改变时区(并通过扩展'移动'计算机提前一两个小时)的事实不会改变系统时钟设置为5:00的事实。 / p>