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