Ntohing_Trolll - 1 year ago 79
Vb.net Question

# Check if timeofday is in a specified range

``````    Dim time As String = TimeOfDay.ToString("tt")
Dim time2 As Integer = TimeOfDay.ToString("hh:mm:ss")
If time = ("du.") Then
timehre = (time2 + 12)
Debug.WriteLine("munkaidoben")
Else
Debug.Write("munkaidoben = false")
timehre = time
End If

For munkaido As Integer = 13 To 19

If time2.ToString.Contains(munkaido) Then
duplaar = False
Else
duplaar = True
End If
Next
``````

Timehre is already declared as integrer.So,what i want,to get time in utc +1,and if time is in range of 13:00 - 19:00 then return a true boolean value,and if it is not in range of 13:00 - 19:00 then returning a false boolean value.

P.s. sorry for bad english,i hope you will understang my question.

First, turn on `Option Strict`:

``````Dim time2 As Integer = TimeOfDay.ToString("hh:mm:ss")
...
For munkaido As Integer = 13 To 19
If time2.ToString.Contains(munkaido) Then
``````

This is a good example of why not using `Option Strict` is a very bad idea for other than toy programs. If the time is "10:45:23", the result in `time2` will be `49`! Where did that come from? It is the ASCII value of the first character in the string.

Later, the code will test if the text `"49"` contains 13 - 19 which can never be true. With the conversion that happens, `time2` can only ever be between`"48"` and `"57"`. Syntactically, it is invalid because a string can never contain an integer.

Not using `Option Strict` can result in this type of unwanted conversion and bugs. Don't leave the compiler to guess what you mean:
Tools -> Options -> Projects and Solutions -> VB Defaults -> Option Strict On

Your code is not really testing if the time is in a range, just whether 13-19 appear somewhere in the string. If the minutes or seconds are one of those values, it will validate.

Dont use strings to do `DateTime` operations. The `DateTime` type has a full set of properties you can use:

``````Dim dt = DateTime.Now

If dt.Hour >= 13 AndAlso dt.Hour <= 19 Then
Return True
Else
Return False
End If
``````

I am not sure how UTC comes into play, but that is also easy using `DateTime` methods:

``````Dim dt = DateTime.Now.ToUniversalTime()
``````

``````Dim dt = DateTime.Now.ToUniversalTime.AddHours(1)