5

我想知道如何使用 DateTime 方法比较 .NET 中的两个 DateTime 对象CompareCompareTo或者Equals不比较刻度。

我只需要毫秒或秒的容忍度。

如何才能做到这一点?

4

4 回答 4

9

您可以从另一个中减去一个DateTime以产生TimeSpan表示它们之间的时间差的 a。然后,您可以测试此跨度的绝对值是否在您所需的容差范围内。

bool dtsWithinASecOfEachOther = d1.Subtract(d2).Duration() <= TimeSpan.FromSeconds(1);

TimeSpan.Duration()如果您知道第一个DateTime不能表示比另一个更早的时间点,则可以省略对的调用,即d1 >= d2.

要回答有关比较方法的查询, DateTime.Compare(d1, d2)产生与以下相同的结果d1.CompareTo(d2)

  • 如果它们代表相同的时间点 ( d1.Equals(d2), d1 == d2),则为 0。但请注意,DateTime 的分辨率为 1 滴答 = 100 纳秒 = 10 ^ -7 秒。
  • 如果 d1 按时间顺序在 d2 之后,则值大于 0 ( d1 > d2)
  • 如果 d1 按时间顺序在 d2 之前,则值小于 0 ( d1 < d2)
于 2010-10-16T15:00:14.183 回答
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);
于 2010-10-16T15:00:41.347 回答
2

通常,如果您想要一个比较来告诉您哪个日期更小、等于或更大,请使用 DateTime.Compare()。否则,您可以使用 DateTime.Equals()。要添加容差值,请从另一个中减去一个并比较结果是否小于某个 TimeSpan:

// For seconds
if (laterDate-earlierDate<=TimeSpan.FromSeconds(1))
  ...

// For milliseconds
if (laterDate-earlierDate<=TimeSpan.FromMilliseconds(1))
  ...
于 2010-10-16T15:00:51.813 回答
2

您可以将两个 DateTimes 都转换为字符串并比较结果字符串。确保您定义了字符串格式,以避免在区域设置与您的不同的机器上出现问题。

于 2010-10-16T15:02:37.453 回答