在不同时间在不同进程中调用时,DateTime.Now是否总是单调的?

时间:2016-11-16 07:41:11

标签: c# datetime

我们假设我在一个进程中执行DateTime.UtcNow,一段时间后我在另一个进程中执行DateTime.UtcNow(甚至是另一个 exe 文件)。

我保证第一个电话会返回一个DateTime值,该值为"较小"或者等于第二个,也就是说,第一个是#34;更大"比第二个,即使几乎同时进行呼叫(即呼叫之间的差异是1ms甚至更短)?

我们假设机器时间在这些调用之间从未以任何方式改变(例如,禁用Windows时间服务)。

2 个答案:

答案 0 :(得分:3)

是和否

DateTime.Now等函数依赖于硬件提供的定时器和时钟,并通过操作系统公开。这些定时器和时钟的可靠性完全取决于平台。话虽如此,我从来没有听说过一个时钟似乎在你描述时向后移动的情况。

可能有更好的时钟

如果您迫切需要高度可靠的高分辨率计时机制,System.DateTime.NowSystem.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,但即使有普遍的时间,也有可能影响你的事情。你可能不幸遇到时间与服务器同步的确切时刻,并通过返回两秒来纠正自己。这不太可能,但仍有可能。