Каков наилучший способ определить, является ли System.DateTime полночь?
Кажется, существует несколько возможных способов определить, представляет ли данный System.DateTime полночь. Каковы плюсы и минусы каждого? Является ли еще более читаемым или лучше, чем другие?
EDIT: я считаю, что читаемость важнее производительности, пока профилирование не покажет, что есть проблема. Вот почему я спросил об обоих.
Пример 1
Public Function IsMidnight(ByVal value As Date) As Boolean
Return value.TimeOfDay = TimeSpan.FromHours(0)
End Function
Пример 2
Public Function IsMidnight(ByVal value As Date) As Boolean
Return value.CompareTo(value.[Date]) = 0
End Function
Ответы
Ответ 1
Я бы проверил (используя С# для примера):
bool isMidnight = value.TimeOfDay.Ticks == 0;
IMO, это проще, чем использование FromHours
и т.д., и не требует никакого дополнительного умножения (поскольку Ticks
определяет TimeSpan
- вычисляются все другие свойства).
Ответ 2
Это немного микро-оптимизация, любой метод будет работать нормально.
Во всяком случае, я думаю, что это будет лучше всего:
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
Ответ 3
Зависит. Вы хотите проверить ровно полночь на вторую, или просто на полночь?
В полночь
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
Просто, ровно в полночь, вы можете использовать свой пример. Однако это будет включать проверки до миллисекунды, которые могут быть не такими, какие вы хотите.