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

C# SystemEvent.TimeChange显示相同的时间甚至时区更改,c#,timezone,C#,Timezone,我编写了这个简单的控制台应用程序来测试当我们在Windows7上使用set date time window手动更改时区时,是否触发了timechange事件?答案是肯定的,它触发了,但我正在打印当前时间,该时间没有正确显示 static void Main(string[] args) { SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged); Console

我编写了这个简单的控制台应用程序来测试当我们在Windows7上使用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);
    }
一旦你运行控制台应用程序,然后试图改变时区,它总是反映一个时间变化,但不知何故,它坚持到那个时间,即使你改变时区为不同的时区或相同的

我错过什么了吗


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

我相信系统时区正在被缓存。您可以通过以下方式清除此缓存:

TimeZoneInfo.ClearCachedData();
把它放在你的
日期时间之前。现在
呼叫,它看起来工作正常。(无论如何,在我的机器上工作:)


编辑:如注释中所述,在某些情况下,似乎还需要调用
CultureInfo.CurrentCulture.ClearCachedData()
。我没有,但我敢说这样做没有坏处:)

愚蠢的问题,但你是在改变时间,还是只是改变时区?5:00是5:00,您更改了时区(并将计算机向前或向后移动了一两个小时)这一事实不会改变系统时钟设置为5:00的事实。

谢谢Jon。我在缓存中也发现了同样的问题。已解决。另外,不要忘记放置CultureInfo.CurrentCulture.ClearCachedData();在TimeZoneInfo.ClearCacheData()之前@用户393014:嗯。。。我不需要那样做。如果你不在你的机器上这样做会发生什么?除非我添加CultureInfo.CurrentCulture.ClearCachedData(),否则时区不会为我更新;还有
DateTime。现在
显示本地时间,当您更改时区时,它会发生变化。(系统假定时钟具有正确的UTC值。)