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 <= 18 OrElse
(dt.Hour = 19 AndAlso dt.Minute = 0)) Then
Return True
Else
Return False
End If
The code tests if the time is between 13:00 AND 19:00 rather than just the hour, in order to detect 19:01 or 19:59 which are the 19th hr but the minutes put it after 19:00, the hours and minutes are checked.
I am not sure how UTC comes into play, but that is also easy using DateTime methods:
Dim dt = DateTime.Now.ToUniversalTime()
To add an hour:
Dim dt = DateTime.Now.ToUniversalTime.AddHours(1)