我实现了一个检查vb.net中时间范围的函数.但它给了我错误的输出.我的开始时间是每天11.00 Pm,结束时间是5.00 AM.如果我通过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
Run Code Online (Sandbox Code Playgroud)
我认为你的代码过于复杂.你可以这样做:
Private Function CheckTimeRange() As Boolean
Return DateTime.Now.Hour >= 23 OrElse DateTime.Now.Hour < 5
End Function
Run Code Online (Sandbox Code Playgroud)
编辑:
如果用户输入了开始和结束时间,则应首先将字符串值转换为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
Run Code Online (Sandbox Code Playgroud)
用法示例:
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
Run Code Online (Sandbox Code Playgroud)
如果您在将字符串值转换为TimeSpan时遇到问题,则应该针对此特定任务提出新问题.