Checken, ob jetzige Zeit zwischen 2 Zeiten liegt

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Checken, ob jetzige Zeit zwischen 2 Zeiten liegt

    Hey.

    Ich habe folgende Funktion, um herauszufinden, ob eine Zeit zwischen Zwei Zeiten liegt.
    Diese klappt soweit auch, aber bei z.B. Startzeit 23:00 und Endzeit 08:00 und einer jetzigen Uhrzeit von 00:10, gibt die Funktion false aus.
    Die Zeit liegt aber ja zwischen den beiden Zeiten. Bei einer Startzeit von 00:00 und den gleichen anderen Werten gibt sie True aus..

    VB.NET-Quellcode

    1. Function IsInTime(ByVal StartTime As String, ByVal StopTime As String) As Boolean
    2. Dim StartS As String = StartTime
    3. Dim StopS As String = StopTime
    4. Dim StartTimeA As String() = StartS.Split(New Char() {":"})
    5. Dim StoPTimeA As String() = StopS.Split(New Char() {":"})
    6. Dim current As DateTime = DateTime.Now
    7. Dim currentHr As Integer = current.Hour
    8. Dim currentMin As Integer = current.Minute
    9. Dim NewHr As String = String.Format("{0:0#}", currentHr)
    10. Dim NewMin As String = String.Format("{0:0#}", currentMin)
    11. If (DateTime.Now.TimeOfDay >= New TimeSpan(StartTimeA(0), StartTimeA(1), 0) AndAlso DateTime.Now.TimeOfDay <= New TimeSpan(StoPTimeA(0), StoPTimeA(1), 0) = True) Then
    12. Return True
    13. Else
    14. Return False
    15. End If
    16. End Function


    Irgendeine Idee wieso? Oder eine bessere Funktion?
    Danke :)

    Mfg.
    @xored Pack die beiden Rand-Zeiten in je eine DateTime-Instanz und dann so:

    VB.NET-Quellcode

    1. ' time1 - Start-Zeit
    2. ' time2 - End-Zeit
    3. If time1 < DateTime.Now AndAlso DateTime.Now < time2 Then
    4. MessageBox("Dazwischen")
    5. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Testvorschlag:

    VB.NET-Quellcode

    1. ​Function IsInTime(ByVal StartTimestamp As String, ByVal EndTimestamp As String) As Boolean
    2. Dim StartTime, EndTime, RefTime As DateTime
    3. RefTime = DateTime.Now
    4. If DateTime.TryParse(StartTimestamp, StartTime) AndAlso DateTime.TryParse(EndTimestamp, EndTime) Then
    5. If StartTime > EndTime Then 'day overlapping times
    6. If RefTime > StartTime Then EndTime = EndTime.AddDays(1) Else StartTime = StartTime.AddDays(-1)
    7. End If
    8. Return RefTime >= StartTime AndAlso RefTime < EndTime
    9. End If
    10. Return False 'invalid timestamps
    11. End Function
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --