DateTime精度?

Roy*_*mir 9 .net c# datetime

(忽略优化的编译器标志)

是不是这个代码会进入某些系统的块?

if (Datetime.Now!=Datetime.Now)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,它如何评估这里的价值观?(按顺序)?

有什么情况可能是真的吗?

再次,忽略优化标志.

Cod*_*aos 5

DateTime精度为100ns.但是在典型的实现中,DateTime.Now每隔几毫秒只会更改一次.

Datetime.Now != Datetime.Now可能是真的,但这种情况极不可能发生.这是您经常在多线程代码中看到的典型竞争条件.即你不应该依赖于DateTime.Now不改变,而是将副本存储在局部变量中.


Tig*_*ran 4

DateTime.Now内部调用:

public static DateTime Now
{
    get
    {
        return DateTime.UtcNow.ToLocalTime();
    }
}
Run Code Online (Sandbox Code Playgroud)

它内部调用:

public static DateTime UtcNow
{
    get
    {
        long systemTimeAsFileTime = DateTime.GetSystemTimeAsFileTime();
        return new DateTime((ulong)(systemTimeAsFileTime + 504911232000000000L | 4611686018427387904L));
    }
}
Run Code Online (Sandbox Code Playgroud)

其中GetSystemTimeAsFile是返回系统时钟信息的 WindowsAPI 函数。准确性取决于系统,所以。

如果您有延迟,由于某种原因,不同的 gets ( DateTime.Now)之间可能会产生足够不同的结果,导致相等比较器失败。但就我个人而言,根据我的经验,从未遇到过这种情况。