在夏令时更改期间出现此问题.更改发生后,我们注意到我们的服务器应用程序开始写入日志错误的时间 - 提前一小时,这意味着.NET缓存时区偏移.我们必须重新启动应用程序才能解决此问题.我写了一个简单的应用程序来重现这个问题.当我在应用程序运行时更改时区时,DateTime.Now属性会在旧时区中生成时间.除了重新启动应用程序之外,有没有人知道这个问题是否有解决方法?
是的,缓存当前时区.有充分的理由,它避免了使用DateTime.Now来实现经过时间测量的破坏代码的麻烦.当时间突然变化一小时或更长时,这样的代码往往会遭受心脏病发作.
您必须调用System.Globalization.CultureInfo.ClearCachedData()来重置缓存的值.下一次调用DateTime.Now现在将给出新的本地时间.如果你完全使用.NET 3.5 TimeZoneInfo类,那么你还需要调用它的ClearCachedData()方法.您可以使用SystemEvents.TimeChanged事件作为触发器.