5

DateTime メソッドを使用してCompareCompareToまたはEqualsティックを比較せずに、.NET で 2 つの DateTime オブジェクトを比較する方法を知りたいです。

ミリ秒または秒の許容レベルだけが必要です。

これはどのように行うことができますか?

4

4 に答える 4

9

DateTime1 つを別のものから減算してTimeSpan、それらの間の時間差を表す を生成できます。次に、このスパンの絶対値が目的の許容範囲内にあるかどうかをテストできます。

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

最初の時点が他の時点よりも前の時点を表すことができないことがわかっている場合、つまりの呼び出しTimeSpan.Duration()は省略できます。DateTimed1 >= 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公差チェックに使用- TimeSpanDateTimes の減算から返される型です。

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);
于 2010-10-16T15:00:41.347 に答える
2

通常、1 回の比較でどの日付が小さいか、等しいか、大きいかを判断するには、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 に答える