我已经写了这个简单的控制台应用程序来测试当我们在Windows7上使用设置日期时间窗口手动更改时区时,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);
}一旦你运行控制台应用程序,然后尝试更改时区,它总是反映一个时间更改,但它以某种方式坚持该时间,即使你将时区更改为不同的时区或相同的时区。
我是不是遗漏了什么?
为了验证系统时间是否已更改,我打开命令提示符,使用date和' time‘命令打印当前时间,并根据时区显示完美。
发布于 2011-09-22 05:44:55
我相信系统时区正在被缓存。不过,您可以清除此缓存:
TimeZoneInfo.ClearCachedData();把它放在你的DateTime.Now调用之前,它看起来工作得很好。(无论如何,在我的机器上工作:)
编辑:正如注释中所述,在某些情况下,您似乎还需要调用CultureInfo.CurrentCulture.ClearCachedData()。我没有,但我敢说这样做没有坏处:)
发布于 2011-09-22 05:46:17
愚蠢的问题,但是你是在改变时间,还是仅仅是时区呢? 5:00是5:00,你改变了时区(并将计算机提前或推迟一两个小时)也不会改变系统时钟设置为5:00的事实。
https://stackoverflow.com/questions/7506997
复制相似问题