2009-03-25 3 views
18

주어진 System.DateTime이 자정을 나타내는 지 확인하는 방법은 여러 가지가있을 수 있습니다. 각 장단점은 무엇입니까? 하나가 더 읽기 쉽거나 다른 것보다 잘 수행됩니까?System.DateTime이 자정인지 확인하는 가장 좋은 방법은 무엇입니까?

편집 : 프로파일 링이 문제가 있음을 보여주기 전까지는 가독성이 성능보다 중요하다고 생각합니다. 그래서 내가 두 가지에 대해 물었습니다.

예 2

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

내 예 VB.NET에서 무엇 나는 현재 전문적으로 사용하고있다. 그러나이 질문은 .NET Framework의 모든 언어에 적용됩니다. –

+0

사용법에 대해 궁금한 분들은 날짜 입력란에 입력 한 날짜 시간대와 날짜 입력란에 입력 한 날짜 시간표를 확인합니다. –

답변

37

내가합니다 (예를 들어 C#을 사용)을 확인 것 :

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

IMO,이 등 FromHours를 사용하는 것보다 쉽게, 그리고 TicksTimeSpan을 정의하기 때문에 (여분의 곱셈을 포함하지 않습니다 - 다른 모든 속성이 계산됩니다).

+0

나는 진드기 측정이 거의 사실로 평가되지 않을 것이라고 생각한다. 두 문장을 실행하면 몇 차례 진드기가 발생할 수 있습니다. 몇 분 동안 확인하는 것이 더 쉬울 수도 있습니다. – Cerebrus

+4

* true * 자정을 나타내는 모든 시간에 대해 true로 평가됩니다. 명시 적으로 'DateTime.Now'에서 호출하지는 않겠지 만 명시된대로 작업을 수행합니다 ... –

+1

더 중요한 것은 원래 질문의 "Return value.TimeOfDay = TimeSpan.FromHours (0)"과 정확히 일치합니다 . 분 등 체크 ** ** –

5

이 달려 1

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

예. 정확히 자정을 확인하고 싶습니까? 아니면 자정입니다. 정확히 자정 자정 시간과 분 순전히 간단하게 들어

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

를 들어 자정 시간

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

를 들어

, 당신은 당신의 예를 사용할 수 있습니다. 그러나 그것은 당신이 원하는 것이 아닐 수도있는 밀리 세컨드까지의 검사를 포함 할 것입니다.

+0

밀리 세컨드까지 정확하게 자정을 찾고 있습니다. –

+0

@ Eric, 그러면 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 == 0) –

+0

예 (= timespan.ticks == timespan.ticks)와 같거나 더 작습니다. 속성을 틱하므로 TimeSpan.Zero.Ticks는 0에 도달하는 데 더 긴 경로입니다. :) – Guffa

관련 문제