我想知道如何使用DateTime方法Compare
,CompareTo
或Equals
比较.NET中的两个DateTime对象而不比较ticks。
我只需要毫秒或秒的容差级别。
如何做到这一点?
答案 0 :(得分:9)
您可以从另一个DateTime
中减去一个TimeSpan
,以生成代表它们之间时差的bool dtsWithinASecOfEachOther = d1.Subtract(d2).Duration() <= TimeSpan.FromSeconds(1);
。然后,您可以测试此跨度的绝对值是否在您所需的公差范围内。
TimeSpan.Duration()
如果您知道第一个DateTime
无法代表较早的某个时间点,即{{1}},则可以省略对d1 >= d2
的调用。
要回答有关比较方法的查询,
DateTime.Compare(d1, d2)
生成与d1.CompareTo(d2)
相同的结果:
d1.Equals(d2)
,d1 == d2
)。请注意,DateTime的分辨率为1 tick = 100纳秒= 10 ^ -7秒。d1 > d2
)d1 < d2
)答案 1 :(得分:2)
使用TimeSpan
进行容差检查 - TimeSpan
是从减去DateTimes返回的类型:
TimeSpan tolerance = new TimeSpan(0,0,1);
return (date1 - date2) <= tolerance;
Compare
,CompareTo
和Equals
不会对比较采取容差,因此不能以这种方式使用。
其他选项是从现有的DateTime
创建新的DateTime noSeconds1 = new DateTime(d1.Year, d1.Month, d1.Day, d1.Hour, d1.Minute, 0);
DateTime noSeconds2 = new DateTime(d2.Year, d2.Month, d2.Day, d2.Hour, d2.Minute, 0);
noSeconds1.Equals(noSeconds2);
DateTime.Compare(noSeconds1, noSeconds2);
noSeconds1.CompareTo(noSeconds2);
,丢弃不需要的准确性并比较新的准确度:
{{1}}
答案 2 :(得分:2)
通常,如果您希望单个比较来告诉您哪个日期更少,等于或大于,请使用DateTime.Compare()。否则,您可以使用DateTime.Equals()。要添加公差值,请从另一个中减去一个,并将结果与某些TimeSpan进行比较:
// For seconds
if (laterDate-earlierDate<=TimeSpan.FromSeconds(1))
...
// For milliseconds
if (laterDate-earlierDate<=TimeSpan.FromMilliseconds(1))
...
答案 3 :(得分:2)
您可以将DateTimes转换为字符串并比较生成的字符串。确保定义字符串格式,以避免在具有不同区域设置的计算机上出现问题。