确定System.DateTime是否为午夜的最佳方法是什么?

时间:2009-03-25 12:51:26

标签: .net

似乎有几种可能的方法来确定给定的System.DateTime是否代表午夜。各自的优点和缺点是什么?是否比其他人更具可读性或表现更好?

编辑:我认为可读性比性能更重要,直到分析显示存在问题。这就是为什么我问到这两个原因。

示例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

3 个答案:

答案 0 :(得分:42)

我会检查(使用C#作为示例):

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

IMO,这比使用FromHours等更容易,并且不涉及任何额外的乘法(因为Ticks 定义了 TimeSpan - 所有其他属性计算)。

答案 1 :(得分: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

答案 2 :(得分:5)

取决于。你想要检查正好是午夜到第二个,还是只是午夜时分?

午夜时分

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

纯粹简单地说,正好是午夜,你可以使用你的例子。但是,这将包括最长可达毫秒的检查。