我想知道如何使用 DateTime 方法比较 .NET 中的两个 DateTime 对象Compare
,CompareTo
或者Equals
不比较刻度。
我只需要毫秒或秒的容忍度。
如何才能做到这一点?
您可以从另一个中减去一个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
)d1 < d2
)用于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);
通常,如果您想要一个比较来告诉您哪个日期更小、等于或更大,请使用 DateTime.Compare()。否则,您可以使用 DateTime.Equals()。要添加容差值,请从另一个中减去一个并比较结果是否小于某个 TimeSpan:
// For seconds
if (laterDate-earlierDate<=TimeSpan.FromSeconds(1))
...
// For milliseconds
if (laterDate-earlierDate<=TimeSpan.FromMilliseconds(1))
...
您可以将两个 DateTimes 都转换为字符串并比较结果字符串。确保您定义了字符串格式,以避免在区域设置与您的不同的机器上出现问题。