1

我实现了一个函数来检查 vb.net 中的时间范围。但它给了我错误的输出。我的开始时间是每天晚上 11 点,结束时间是早上 5 点。如果我通过 1.10 AM,我的函数不会返回真正的输出,因为这属于该时间范围。不知道我做错了什么。

Private Function CheckTimeRange() As Boolean
  Dim retValue As Boolean = True
  Try
    Dim Dt As DateTime = DateTime.Now
    Dim StartDt As DateTime = Convert.ToDateTime("11.00 PM")
    Dim EndDt As DateTime =  Convert.ToDateTime("5.00 AM")

    Dim startTime As New TimeSpan(StartDt.Hour, StartDt.Minute, 0)
    Dim endTime As New TimeSpan(EndDt.Hour, EndDt.Minute, 0)
    Dim now As TimeSpan = DateTime.Now.TimeOfDay

    If (now > startTime) AndAlso (now < endTime) Then
      retValue = True
    Else
      retValue = False
    End If
    Return retValue
  Catch ex As Exception
  End Try
End Function
4

2 回答 2

9

我认为您的代码过于复杂。你可以这样做:

Private Function CheckTimeRange() As Boolean
    Return DateTime.Now.Hour >= 23 OrElse DateTime.Now.Hour < 5
End Function

编辑:

如果开始时间和结束时间由用户输入,则应先将字符串值转换为TimeSpan对象,然后可以使用更灵活的方法,将日期、最小时间和最大时间作为参数:

Private Function CheckTimeRange(myDate As DateTime, minTime as TimeSpan, maxTime As TimeSpan) As Boolean
    If minTime > maxTime Then
        Return myDate.TimeOfDay >= minTime OrElse myDate.TimeOfDay < maxTime
    Else
        Return myDate.TimeOfDay >= minTime AndAlso myDate.TimeOfDay < maxTime
    End If
End Function

示例用法:

Dim minTime As New TimeSpan(23, 0, 0) 'Should be converted from 11.00 PM
Dim maxTime As New TimeSpan(5, 0, 0) 'Should be converted from 5.00 AM
CheckTimeRange(New Date(2012, 1, 1, 15, 0, 0), minTime, maxTime) '==> false
CheckTimeRange(New Date(2012, 1, 1, 22, 30, 0), minTime, maxTime) '==> false
CheckTimeRange(New Date(2012, 1, 1, 23, 00, 0), minTime, maxTime) '==> true
CheckTimeRange(New Date(2012, 1, 2, 1, 10, 0), minTime, maxTime) '==> true
CheckTimeRange(New Date(2012, 1, 2, 4, 59, 0), minTime, maxTime) '==> true
CheckTimeRange(New Date(2012, 1, 2, 5, 10, 0), minTime, maxTime) '==> false

如果您在将字符串值转换为 TimeSpan 时遇到问题,您应该针对此特定任务提出一个新问题。

于 2012-05-09T14:35:32.190 回答
0

您正在使用 TimeSpan 对象,您会发现没有日期的情况下,上午 1.10 永远不会超过晚上 11.00。

Meta-Knight 有更好的解决方案。

于 2012-05-09T14:34:43.593 回答