Windows系统时间是否因NTP时间更新而发生变化?

时间:2012-08-20 23:01:54

标签: c# windows datetime

我希望在我的C#应用​​程序中更改Windows系统日期/时间时收到通知。我找到了SystemEvents.TimeChanged事件,MSDN文档说明了这一事件:

  

当用户更改系统时钟的时间时发生。

如果NTP更改时钟,是否会触发此事件?或者我可以订阅另一个活动吗?

实施细节:

我想要一个timer.Elapsed事件在特定日期/时间触发。我的代码计算用于计时器所需的间隔。如果系统时间发生变化,则需要重新计算此计算以计算新的时间间隔并更新计时器。

答案摘要

感谢所有评论。我在下面对它们进行了总结,以供将来参考:

  • SystemEvents.TimeChanged会在用户更改时以及系统调用NTP服务器重新同步时触发
  • 如果在Windows服务中运行,则需要处理消息泵以获取TimeChanged事件。这可以通过运行调度程序来实现。
  • NTP服务器不应用离散的系统日期更改。考虑到计算的时钟漂移和本地时钟与其他NTP服务器之间的偏移,逐步应用NTP时钟调整
  • 对于我的实施,最好定期评估计时器间隔,以考虑任何系统时间变化,而不是设置一次间隔并使其激活。

1 个答案:

答案 0 :(得分:4)

是的,当您将Windows配置为使用NTP服务器来保持最新时间以及有人手动更改时间时,会引发TimeChanged

这里需要注意的是,您必须拥有一个UI。 (或者启动隐藏窗口以获取消息泵)。即您无法在Windows服务中获得TimeChanged事件。