Проверьте, находится ли timeofday в указанном диапазоне
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 уже объявлено как interer.Так что я хочу, чтобы получить время в utc +1, и если время находится в диапазоне 13:00 - 19:00, то вернуть истинное логическое значение, и если оно не находится в диапазоне 13:00 - 19:00, затем возвращает ложное логическое значение.
Ps извините за плохой английский, надеюсь, вы поймете мой вопрос.
2 ответа
Сначала включи Option Strict
:
Dim time2 As Integer = TimeOfDay.ToString("hh:mm:ss")
...
For munkaido As Integer = 13 To 19
If time2.ToString.Contains(munkaido) Then
Это хороший пример того, почему не использовать Option Strict
это очень плохая идея для других программ, кроме игрушек. Если время "10:45:23", результат в time2
будет 49
! Откуда это пришло? Это значение ASCII первого символа в строке.
Позже код будет проверять, если текст "49"
содержит 13 - 19, что никогда не может быть правдой. С преобразованием, которое происходит, time2
может быть только между"48"
а также "57"
, Синтаксически это недопустимо, потому что строка никогда не может содержать целое число.
Не используется Option Strict
может привести к этому типу нежелательного преобразования и ошибок. Не оставляйте компилятор, чтобы угадать, что вы имеете в виду:
Сервис -> Параметры -> Проекты и решения -> Стандартные настройки VB -> Параметр "Строгое включено"
Ваш код на самом деле не проверяет, находится ли время в определенном диапазоне, просто появляется ли 13-19 где-нибудь в строке. Если минуты или секунды являются одним из этих значений, они будут проверены.
Не используйте строки, чтобы сделать DateTime
операции. DateTime
Тип имеет полный набор свойств, которые вы можете использовать:
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
Код проверяет, находится ли время между 13:00 и 19:00, а не только часом, чтобы определить 19:01 или 19:59, которые являются 19-м часом, а минуты помещают его после 19:00, часов и минуты проверены.
Я не уверен, как UTC входит в игру, но это также легко использовать DateTime
методы:
Dim dt = DateTime.Now.ToUniversalTime()
Чтобы добавить час:
Dim dt = DateTime.Now.ToUniversalTime.AddHours(1)
Я должен был достичь чего-то похожего в последнее время. Это то, что я придумал.
Public Function GetHoursSinceMidnight(ByVal dDateTime As DateTime) As Double
Dim myTimeSpan As TimeSpan = dDateTime - dDateTime.Date
Return myTimeSpan.TotalHours
End Function
Public Function IsTimeInRange(ByVal dDateTime As DateTime, ByVal dStartTime As Double, ByVal dEndTime As Double) As Boolean
Dim dTime As Double = GetHoursSinceMidnight(dDateTime)
Return dTime >= dStartTime AndAlso dTime <= dEndTime
End Function
Таким образом, чтобы проверить, является ли текущее время между 13:00 и 19:00 по универсальному времени плюс один час, звоните:
IsTimeInRange(DateTime.Now.ToUniversalTime.AddHours(1), 13, 19)
Он вернет True, если текущее время между 13:00 и 19:00, и False, если он находится за пределами диапазона.