2011-01-22 1 views
0

私の仕事場では、デルファイを私の仕事場で使用していましたが、日付の比較を含むいくつかの徹底的なユニットテストの間に、との直接比較がの演算子に等しいことがわかりました。およびSameDateTimeはDelphiの日付比較用の関数に組み込まれています。最も信頼できる方法として、日付時刻を比較する方法はありますか?

C#では、習慣の力によって、標準オペレータ=<>を使用して日付と時刻を比較します。日付時刻の比較にはDateTime.CompareDateTime.Equalsのような類似の機能がありますので、&の信頼性については、の組み込み関数を代わりに使用する必要がありますか?

オペレータを使用すると正確な比較ができますか?

+0

UTCとローカルタイムスタンプを減算すると、生の時間値が減算されることに注意してください。 – CodesInChaos

答えて

3

あなたの日付/時刻が計算されると、あなたはTimeSpanを与える時間の差を計算する方がよいでしょう。

TimeSpan travelTime = arrival - departure; 

これは、許容範囲を下回っているかどうかを確認できます。

あなたは浮動小数点値のために取る必要があるが、それはメモリ内で表現されますどのように不正確さがあなたのデータから、茎、この場合のようにそれとは独立していないアプローチに似
if (Math.Abs(travelTime.TotalMilliseconds) < tolerance) 
{ 
    // times are equal. 
} 

これ。

+1

これは私にも気になる最初のものです。 DateTimeの拡張メソッドに素早くラップすることができます。 – tomfanning

+0

私が混乱しているのは、なぜ、信頼できない場合にオペレータの比較を可能にするのですか?演算子はDateTimesで正確に何をしていますか? – James

+0

@James - これは 'float1 == float2'と同じように許可されています。それは言語の一部です。日付部分または*割り当てられた日付/時刻を扱っていた場合、平等はおそらくOKですが、計算された時間はミリ秒または秒です。 – ChrisF

0

私は本当にわかりませんが、私の同僚は常にEquals演算子を使用するように指示しました。 DateTimeオブジェクトの場合、EqualsCompareはティックを比較しています。

TimeSpan ChrisFについて詳しくは、hereを参照してください。

+0

これは「TimeSpan」に関するものです。演算子の比較が十分に信頼できるかどうかを明確にすることを探していただけです。 – James

関連する問題