C# 是DateTime。现在在不同的时间在不同的进程中调用时总是单调的吗?
假设我在一个进程中执行C# 是DateTime。现在在不同的时间在不同的进程中调用时总是单调的吗?,c#,datetime,C#,Datetime,假设我在一个进程中执行DateTime.UtcNow,一段时间后在另一个进程(甚至另一个exe文件)中执行DateTime.UtcNow 我是否保证第一次调用将返回一个小于或等于第二次调用的DateTime值,即即使调用几乎同时进行(即调用之间的差异为1ms或更小),第一次调用也不会比第二次调用“大” 假设在这些调用之间,机器时间不会以任何方式更改(例如,Windows时间服务被禁用)。一般来说,是的,时间只会向前移动,因此您可以相信,假设有一个稳定的环境—一个日期时间。现在/日期时间。UtcN
DateTime.UtcNow
,一段时间后在另一个进程(甚至另一个exe文件)中执行DateTime.UtcNow
我是否保证第一次调用将返回一个小于或等于第二次调用的DateTime
值,即即使调用几乎同时进行(即调用之间的差异为1ms或更小),第一次调用也不会比第二次调用“大”
假设在这些调用之间,机器时间不会以任何方式更改(例如,Windows时间服务被禁用)。一般来说,是的,时间只会向前移动,因此您可以相信,假设有一个稳定的环境—一个
日期时间。现在/日期时间。UtcNow
将始终大于之前的值
然而,你应该避免过多地依赖这一点。有些事情可能会打破这一假设。对于本地时间,您需要注意DST,但即使使用世界时,也可能有一些事情会影响您。你可能很不走运,刚好赶上了与服务器同步的时间,并通过返回两秒钟进行自我更正。这不太可能,但仍有可能。是和否
像DateTime这样的功能。现在
依赖于硬件提供并通过操作系统公开的计时器和时钟。这些计时器和时钟的可靠性完全取决于平台。话虽如此,我从未听说过像你所描述的那样,时钟似乎向后移动的例子
可能会有更好的时钟
如果您迫切需要一种高度可靠、高分辨率的计时机制,System.DateTime.Now
和System.DateTime.UtcNow
不一定是最好的资源。Win32 API公开了更精确的“多媒体”计时器和计数器(例如,分辨率为5-10毫秒而不是50毫秒) 除非您碰巧在几毫秒内更改了机器的日期时间,否则我猜它不会比任何其他时间都大,DateTime.Now
返回本地时间,在许多时区,由于夏令时的原因,该时间每年后退一小时。你真的想问关于DateTime.UtcNow
?是的,我们可以谈论DateTime.UtcNow
来简化事情。我建议你更新你的问题。另一个重要的方面是如何保持系统时钟同步-您是否假设只更新了Windows时间服务。假设Windows时间服务已禁用,并且在两次呼叫之间时间从未更改。