我们假设我在一个进程中执行DateTime.UtcNow
,一段时间后我在另一个进程中执行DateTime.UtcNow
(甚至是另一个 exe 文件)。
我保证第一个电话会返回一个DateTime
值,该值为"较小"或者等于第二个,也就是说,第一个是#34;更大"比第二个,即使几乎同时进行呼叫(即呼叫之间的差异是1ms甚至更短)?
我们假设机器时间在这些调用之间从未以任何方式改变(例如,禁用Windows时间服务)。
答案 0 :(得分:3)
DateTime.Now
等函数依赖于硬件提供的定时器和时钟,并通过操作系统公开。这些定时器和时钟的可靠性完全取决于平台。话虽如此,我从来没有听说过一个时钟似乎在你描述时向后移动的情况。
如果您迫切需要高度可靠的高分辨率计时机制,System.DateTime.Now
和System.DateTime.UtcNow
不一定是最佳资源。 Win32 API公开了多媒体"定时器和计数器更精确(例如,5-10 ms分辨率与50 ms)。 Here is an example of a class that uses win32 high resolution timers.
答案 1 :(得分:2)
一般来说,是的,时间只会向前推进,所以你可以相信 - 假设一个稳定的环境 - DateTime.Now
/ DateTime.UtcNow
总是大于之前采取的那个。
但是,你应该避免过多地依赖它。有些事情可能会打破这种假设。对于当地时间,你需要小心DST,但即使有普遍的时间,也有可能影响你的事情。你可能不幸遇到时间与服务器同步的确切时刻,并通过返回两秒来纠正自己。这不太可能,但仍有可能。