DateTime メソッドを使用してCompare
、CompareTo
またはEquals
ティックを比較せずに、.NET で 2 つの DateTime オブジェクトを比較する方法を知りたいです。
ミリ秒または秒の許容レベルだけが必要です。
これはどのように行うことができますか?
DateTime
1 つを別のものから減算して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
)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);
通常、1 回の比較でどの日付が小さいか、等しいか、大きいかを判断するには、DateTime.Compare() を使用します。それ以外の場合は、DateTime.Equals() を使用できます。許容値を追加するには、一方を他方から減算し、結果を比較して TimeSpan より小さくします。
// For seconds
if (laterDate-earlierDate<=TimeSpan.FromSeconds(1))
...
// For milliseconds
if (laterDate-earlierDate<=TimeSpan.FromMilliseconds(1))
...
両方の DateTimes を文字列に変換し、結果の文字列を比較できます。地域設定が異なるマシンで問題が発生しないように、必ず文字列形式を定義してください。