I wonder how to compare two DateTime objects in .NET using DateTime methods Compare
, CompareTo
or Equals
without comparing ticks.
I only need a tolerance level of milliseconds or seconds.
How can this be done?
You can subtract one DateTime
from another to produce a TimeSpan
that represents the time-difference between them. You can then test if the absolute value of this span is within your desired tolerance.
bool dtsWithinASecOfEachOther = d1.Subtract(d2).Duration() <= TimeSpan.FromSeconds(1);
The call to TimeSpan.Duration()
can be omitted if you know that the first DateTime
cannot represent an earlier point in time than the other, i.e. d1 >= d2
.
To answer your query about the comparison methods,
DateTime.Compare(d1, d2)
produces the same result as d1.CompareTo(d2)
:
d1.Equals(d2)
, d1 == d2
). Do note though, that the resolution of DateTime is 1 tick = 100 nanoseconds = 10 ^ -7 seconds.d1 > d2
)d1 < d2
)