2009-03-25 11 views
18

特定のSystem.DateTimeが真夜中を表すかどうかを判断する方法はいくつか考えられます。それぞれの長所と短所は何ですか? 1つは読みやすく、他のものよりも優れていますか?System.DateTimeが真夜中かどうかを判断する最も良い方法は何ですか?

EDIT:プロファイリングで問題があることが判明するまでは、読みやすさはパフォーマンスより重要です。それで私は両方について尋ねたのです。

例1

Public Function IsMidnight(ByVal value As Date) As Boolean 
    Return value.TimeOfDay = TimeSpan.FromHours(0) 
End Function 

例2

+0

それが何であるので、私の例はVB.NETであります私は現在専門的に使用しています。ただし、この質問は.NET Frameworkのすべての言語に適用されます。 –

+0

使い方について興味がある人は、日付フィールドで入力した日付時刻と日付時刻フィールドで入力した日付時刻を確認しています。 –

答えて

37

私は(たとえばC#を使用して)確認したい:

bool isMidnight = value.TimeOfDay.Ticks == 0; 

IMO、これはFromHoursなどを使用するよりも容易であり、Ticks以来TimeSpanを定義した(余分な乗算を必要としません - すべての他の特性が計算される)。

+0

私は、ダニの測定がほとんど真実ではないと思います。いくつかのステートメントを実行するには数回のtickが必要です。分単位で確認するのは簡単でしょう。 – Cerebrus

+4

* true *真夜中を表すすべての時間について真と評価されます。あなたは 'DateTime.Now'でそれを呼び出すことはありませんが、明示的にはその仕事をします... –

+1

さらに重要なことは、元の質問からの"返り値TimeOfDay = TimeSpan.FromHours(0) "とまったく同じです。分などのチェック** ** –

5
Public Function IsMidnight(ByVal value As Date) As Boolean 
    Return value.CompareTo(value.[Date]) = 0 
End Function 

は異なり。正確に真夜中をチェックしたいのですか、それとも真夜中の時間ですか?深夜の時間と分のために深夜の時間

Public Function IsMidnightHour(ByVal date as Date) As Boolean 
    return date.Hour = 0 
End Function 

については

Public Function IsMidnightHourAndMinute(ByVal date as Date) As Boolean 
    return date.Hour = 0 AndAlso date.Minute = 0 
End Function 

純粋に単純にするために、正確に真夜中あなたはあなたの例を使用することができます。しかし、それはあなたが望むものではないかもしれないミリ秒までのチェックを含みます。

+0

私は正確に真夜中をミリ秒まで探しています。 –

+0

@エリック、Marcの答えが最も効率的です。 – JaredPar

7

これはマイクロ最適化のビットですが、いずれの方法も問題なく動作します。

とにかく、私はこれが最善行うだろうかだと思う:

Public Function IsMidnight(ByVal value As Date) As Boolean 
    Return value.TimeOfDay.Ticks = 0 
End Function 

あなたが理解しやすいコードをしたい場合は、おそらくこれがベストです:

Public Function IsMidnight(ByVal value As Date) As Boolean 
    Return value.TimeOfDay = TimeSpan.Zero 
End Function 
+0

実際には、TicksはTimeSpanの内部値として使用されるため、多少なりとも同等に機能するはずです。したがって、timespan == timespanはどちらの場合もtimespan.ticks == timespan.ticksとほぼ同じです(timespan.ticks == 0) –

+0

はい、==演算子は、 Ticksプロパティであるため、TimeSpan.Zero.Ticksはゼロに達するための長いルートです。 :) – Guffa

関連する問題