如何比较两个日期时间

时间:2010-10-16 14:58:15

标签: .net datetime compare equals compareto

我想知道如何使用DateTime方法CompareCompareToEquals比较.NET中的两个DateTime对象而不比较ticks。

我只需要毫秒或秒的容差级别。

如何做到这一点?

4 个答案:

答案 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)相同的结果:

  • 0如果它们代表相同的时间点(d1.Equals(d2)d1 == d2)。请注意,DateTime的分辨率为1 tick = 100纳秒= 10 ^ -7秒。
  • 如果d1在d2(d1 > d2
  • 之后按时间顺序排列,则值大于0
  • 如果d1在d2(d1 < d2
  • 之前按时间顺序排列,则小于0的值

答案 1 :(得分:2)

使用TimeSpan进行容差检查 - TimeSpan是从减去DateTimes返回的类型:

TimeSpan tolerance = new TimeSpan(0,0,1);
return (date1 - date2) <= tolerance;

CompareCompareToEquals不会对比较采取容差,因此不能以这种方式使用。

其他选项是从现有的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转换为字符串并比较生成的字符串。确保定义字符串格式,以避免在具有不同区域设置的计算机上出现问题。