2012-05-09 86 views
1

我實現了一個函數來檢查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 
+0

你確定你沒有遇到異常嗎?我無法使用en-GB和en-US格式提供程序解析Convert.ToDateTime(「11.00 PM」)。 – Alex

回答

8

我認爲你的代碼過於複雜。你可以這樣做:

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時遇到困難,應該針對此特定任務詢問一個新問題。

+0

感謝您的幫助。但有時可以輸入時間爲11.30,1.30等。在這些情況下應如何計算。 – user1296417

+0

@ user1296417:查看我的編輯。 –

+0

但問題是他們正在指定11.00 PM和5.00 AM。今天是11.00 PM,第二天是5.00 AM。不太確定如何得到這兩個日期。該功能總是讓我相同的日期。 – user1296417

0

您正在使用TimeSpan對象,並且您會發現1.10 AM從未大於11.00pm而沒有日期。

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

相關問題