Проверьте, находится ли 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, если он находится за пределами диапазона.

Другие вопросы по тегам