Подтвердить что ты не робот

Каков наилучший способ определить, является ли 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
4b9b3361

Ответ 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

Просто, ровно в полночь, вы можете использовать свой пример. Однако это будет включать проверки до миллисекунды, которые могут быть не такими, какие вы хотите.