如何比较两个日期时间

5
我想知道如何使用DateTime方法CompareCompareToEquals在.NET中比较两个DateTime对象,而不需要比较ticks。
我只需要毫秒或秒的容差水平。
应该怎么做?
4个回答

10
您可以将一个DateTime从另一个DateTime中减去,以生成一个表示它们之间时间差的TimeSpan。然后,您可以测试该跨度的绝对值是否在您所需的公差范围内。
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)

2
使用 TimeSpan 进行容差检查 - TimeSpan 是从两个日期时间相减后返回的类型:
TimeSpan tolerance = new TimeSpan(0,0,1);
return (date1 - date2) <= tolerance;

Compare, CompareToEquals都没有容忍比较的参数,所以不能这样使用。

其他选项是从现有的日期时间创建新的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);

2

通常情况下,如果您想要一个单一的比较来告诉您哪个日期更早、相等或更晚,可以使用DateTime.Compare()。否则,您可以使用DateTime.Equals()。要添加容差值,请从一个日期减去另一个日期,并将结果与某个TimeSpan进行比较:

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

// For milliseconds
if (laterDate-earlierDate<=TimeSpan.FromMilliseconds(1))
  ...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接