【发布时间】:2010-12-27 21:51:27
【问题描述】:
我尝试使用 Datetime.CompareTo() 方法将 Datetime.Now 与我设置的 Datetime 变量进行比较。我使用计时器每秒比较这些并显示结果,但是随着当前时间接近我设置的时间,结果从 1 变为 -1,但从不为 0,这意味着这两个永远不相等。我怀疑 Datetime 结构包含毫秒?
【问题讨论】:
我尝试使用 Datetime.CompareTo() 方法将 Datetime.Now 与我设置的 Datetime 变量进行比较。我使用计时器每秒比较这些并显示结果,但是随着当前时间接近我设置的时间,结果从 1 变为 -1,但从不为 0,这意味着这两个永远不相等。我怀疑 Datetime 结构包含毫秒?
【问题讨论】:
你猜对了。虽然它超过了毫秒。最大分辨率为"tick",等于 100 纳秒。
【讨论】:
正如其他人在这里提到的,分辨率是 100ns。
最简单的方法是使用您的 DateTime 并减去 DateTime.Now。然后你会得到一个 TimeSpan。如果 TimeSpan 的 TotalSeconds 属性为 0,则它们之间的差异小于一秒。
【讨论】:
DateTime 比较比与秒比较更精确。在您的场景中,您可以定义一个“错误范围”,例如如果两个DateTime 之间的间隔小于 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
}
【讨论】:
我更喜欢比较 Datetime(以及双精度)而不是精确值,而是值范围,因为您不太可能拥有精确值。
DateTime d1 = new DateTime(2011, 12, 27, 4, 37, 17);
DateTime d2 = DateTime.Now;
if ((d2 >= d1) && (d2 <= d1.AddMinutes(1)))
....
【讨论】:
'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
【讨论】: