代码之家  ›  专栏  ›  技术社区  ›  Eric Weilnau

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

  •  19
  • Eric Weilnau  · 技术社区  · 17 年前

    似乎有几种可能的方法来确定给定的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 回复  |  直到 17 年前
        1
  •  40
  •   Marc Gravell    17 年前

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

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

    在我看来,这比使用 FromHours 等等,并且不涉及任何额外的乘法(因为 Ticks 定义 这个 TimeSpan -所有其他属性均已计算)。

        2
  •  7
  •   Guffa    17 年前

    这是一个微优化,任何一种方法都可以很好地工作。

    不管怎样,我认为这是最好的表现:

    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
  •  5
  •   JaredPar    17 年前

    视情况而定。你是想检查午夜到第二个午夜,还是只检查午夜?

    午夜时分

    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
    

    简单地说,就是午夜,你可以用你的例子。然而,这将包括检查毫秒,这可能不是你想要的。

    推荐文章