两个Datetime变量何时相等?

时间:2010-12-27 07:33:42

标签: c# asp.net vb.net

我尝试使用Datetime.CompareTo()方法将Datetime.Now与我设置的Datetime变量进行比较。我使用计时器每秒比较这些并显示结果,但是当当前时间接近我设置的时间时,结果从1变为-1,但从不变为0,这意味着这两个永远不会相等。我怀疑Datetime结构包含毫秒?

7 个答案:

答案 0 :(得分:6)

你怀疑是正确的。它比毫秒更进一步。最大分辨率为"tick",等于100纳秒。

答案 1 :(得分:3)

正如其他人在此提到的那样,分辨率为100ns。

最简单的方法是采用DateTime并减去DateTime.Now。然后你最终得到了TimeSpan。如果TimeSpan的TotalSeconds属性为0,则它​​们之间的差异小于一秒。

答案 2 :(得分:2)

你的怀疑是正确的。 DateTime结构最小单位是"Tick",以100ns为单位进行测量。 (一个刻度是100ns)

你更想要做的是检查秒内的所有内容是否相等,你可以这样做,首先比较Date属性,然后分别比较小时,分钟和秒属性

答案 3 :(得分:1)

DateTime比较比与秒比较更准确。在您的方案中,您可以定义“错误范围”,例如如果两个DateTime之间的差距小于1秒,则认为它们是相同的(在您的程序中)。

答案 4 :(得分:1)

试试这个......(但当然要更改测试日期)

        DateTime d1 = new DateTime(2011, 12, 27, 4, 37, 17);
        DateTime d2 = DateTime.Now;

        if (d1.Subtract(d2).Seconds <= 1)
        {
            //consider these DateTimes equal... continue
        }

答案 5 :(得分:0)

我更喜欢将Datetime(以及double)与精确值进行比较,而不是使用值范围,因为您不太可能具有确切的值。

    DateTime d1  = new DateTime(2011, 12, 27, 4, 37, 17);
    DateTime d2  = DateTime.Now;

    if ((d2 >= d1) && (d2 <= d1.AddMinutes(1)))
       ....

答案 6 :(得分:0)

    'simulate comparison of two datetimes
    d1 = DateTime.Now
    Threading.Thread.Sleep(250)
    d2 = DateTime.Now

    'see if two dates are within a second of each other
    Dim ts As Double = ((d2 - d1).TotalSeconds)
    If ts < 1 Then
        'equal
        Debug.WriteLine("EQ " & ts.ToString("n4"))
    Else
        Debug.WriteLine("neq " & ts.ToString("n4"))
    End If