2016-11-12 13 views
2
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 уже объявлен integrer.So, что я хочу, чтобы получить время в формате UTC + 1, и если время находится в диапазоне 13:00 - 19:00, то возвращает истинное логическое значение, и если оно не находится в диапазоне 13:00 - 19:00, то возвращается ложное логическое значение.Проверьте TimeOfDay находится в указанном диапазоне

P.s. извините за плохой английский, я надеюсь, что вы поймете мой вопрос.

+0

Я искал определенную строку, потому что я не знаю, как преобразовать timeofday в utc +1 time. –

ответ

0

Во-первых, включите 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 value первого символа в строке.

Позже код будет проверять, если текст "49" содержит 13 - 19, что никогда не может быть правдой. С преобразованием, которое происходит, time2 может быть только между "48" и "57". Синтаксически это неверно, потому что строка никогда не может содержать целое число.

Не использовать Option Strict может привести к такого рода нежелательному преобразованию и ошибкам. Не оставляйте компилятор угадать, что вы имеете в виду:
Инструменты -> Параметры -> Проекты и решения -> VB Defaults -> Option Strict On


Ваш код не тестируете, если время находится в диапазоне, только 13-19 появляются где-то в строке. Если минуты или секунды являются одним из этих значений, оно будет проверяться.

Dont использовать строки, чтобы сделать 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) 
+0

Свойство DateTime.Hour возвращает целое число. Он вычисляет количество часов с полуночи и округляет до ближайшего целого числа. Поэтому, если время 7:30 вечера, DateTime.Now.Hour вернет 19, а опубликованная функция вернет True. Однако, 7:30 вечера находится за пределами диапазона часов от 13 до 19, и поэтому он должен возвращать False. Чтобы определить, находится ли время в пределах определенного диапазона часов, количество часов с полуночи должно быть рассчитано как Двойное. –

0

я должен был достигнуть что-то подобное в последнее время. Это то, что я придумал.

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 

Таким образом, чтобы проверить, если текущее время находится между 1pm и 7pm универсального временем плюс один часом, звоните:

IsTimeInRange(DateTime.Now.ToUniversalTime.AddHours(1), 13, 19) 

Она возвращает Истину, если текущее время находится между 1pm и 7pm и Ложью, если он выходит за пределы диапазона.

Смежные вопросы