.net - 如何检测系统时间是否更改? (来自.net)

标签 .net windows time

我在我的软件中使用 DateTime.UtcNow 来测量时间,并且需要能够判断“ Action a”是否在“ Action b”之后发生的时间少于 10 秒

但是如果系统时间改变了怎么办?那么如何检测系统时间是否更改?

我不希望使用秒表,因为我们需要在具有多个 CPU 的服务器上运行,请参阅 http://kristofverbiest.blogspot.com/2008/10/beware-of-stopwatch.html

我还需要应对虚拟机的暂停和重启,因此“滴答计数”不太可能对我有用。

最佳答案

您可以使用 SystemEvents.TimeChanged 检测时间改变的事件。但是,只有在运行消息泵时才会触发 - 这对于 Windows 客户端应用程序来说很好,但对于大多数服务器应用程序(如服务、Web 应用程序等)来说就不是那么多了。

否则你可以使用 Environment.TickCount - 它没有很好的分辨率,但如果你的“10”秒可以是“将近 10 秒”,你可能没问题。就 VM 限制而言,请注意当机器启动时间足够长时 TickCount 会翻转,因此您必须处理它,可能使用 DateTime.UtcNow。以任何一种方式进行健全性检查。

我会结合使用两者 - 但请注意,除了检查一些已知准确的外部时间服务器(这将产生性能影响)之外,没有绝对准确的方法,无论如何都会在 VM 情况下工作......在花费超出问题值(value)的时间之前,请确保确定什么是“足够可靠”。

关于.net - 如何检测系统时间是否更改? (来自.net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246882/

相关文章:

.net - Base64 编码数据最大大小

c# - 在 .net 中使用 SmtpClient 发送邮件

c# - WPF:从文本框中获取 "wrapped"文本

c++ - C++ 中 gettimeofday() 的最佳替代库是什么?

python - 将秒转换为 hh :mm:ss with large numbers in Python 时出现问题

c# - ASP.NET 中的文本多重搜索

windows - 为什么录音机代码可以工作8位,但不能工作16位?

windows - MIT/Scheme 作为 Windows 下的简单编译器

windows - 如何检测是否安装了 Windows Installer?

ruby-on-rails - Rails 时间与 rspec 不一致