1

vb.netで時間範囲をチェックする関数を実装しました。しかし、それは私に間違った出力を与えています。私の開始時間は毎日11.00Pmで、終了時間は5.00AMです。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分が午後1時を超えることはありません。

Meta-Knightにはより良い解決策があります。

于 2012-05-09T14:34:43.593 に答える