2015-03-10 4 views
0

Пользователь вводит время начала и окончания своего бронирования через datetimepickers. Я хочу быть в состоянии убедиться, что бронирование находится в открытые времена зала. Я попытался это:сравнение времени бронирования и времени открытия

MsgBox("start time: " & start_time.value & " End time:" & end_time.value & "") 
     If DateTime.Parse(Datetimepicker1.text).DayOfWeek = "1 " Then 
      If start_time.value < "08:00:00" Or end_time.value > "22:30:00" Then 
       errors.Enqueue("The booking slot must be within the open hours") 
      End If 
     ElseIf DateTime.Parse(Datetimepicker1.text).DayOfWeek = "2" Then 
      If start_time.value < "08:00:00" Or end_time.value > "22:30:00" Then 
       errors.Enqueue("The booking slot must be within the open hours") 
      End If 
     ElseIf DateTime.Parse(Datetimepicker1.text).DayOfWeek = "3" Then 
      If start_time.value < "08:00:00" Or end_time.value > "22:30:00" Then 
       errors.Enqueue("The booking slot must be within the open hours") 
      End If 
     ElseIf DateTime.Parse(Datetimepicker1.text).DayOfWeek = "4" Then 
      If start_time.value < "08:00:00" Or end_time.value > "22:30:00" Then 
       errors.Enqueue("The booking slot must be within the open hours") 
      End If 
     ElseIf DateTime.Parse(Datetimepicker1.text).DayOfWeek = "5" Then 
      If start_time.value < "08:00:00" Then 
       errors.Enqueue("The booking slot must be within the open hours") 
      End If 
     ElseIf DateTime.Parse(Datetimepicker1.text).DayOfWeek = "6" Then 
      If start_time.value < "10:00:00" Then 
       errors.Enqueue("The booking slot must be within the open hours") 
      End If 
     ElseIf DateTime.Parse(Datetimepicker1.text).DayOfWeek = "7" Then 
      If start_time.value < "10:00:00" Then 
       errors.Enqueue("The booking slot must be within the open hours") 
      End If 
     End If 

Он работает в пятницу, субботу и воскресенье, но не для других дней недели, что заставляет меня думать, что что-то делать с оператором ИЛИ в те дни, но я вполне могу понять, почему.

+1

Какие значения являются «start_time» и «end_time»? Также вы можете просто использовать 'DateTimePicker1.Value.DayOfWeek' вместо вызова метода' .Parse'. Я бы рекомендовал использовать оператор select-case для этого сценария, а не использовать if-elseif; значительно повышают удобочитаемость. –

+1

Я уверен, что параметр Strict не включен, потому что 'If start_time.value <" 10:00:00 "' сравнивает тип DateTime с строкой. Вместо использования DateTime.Parse, чтобы получить Dayof Week, 'Datetimepicker1.Value' даст вам это прямо. Наконец, все это может быть упрощено с помощью Else или Case Statement – Plutonix

+0

Готов поспорить, что это фактически значение времени, но именно поэтому я и спросил в своем комментарии. –

ответ

1

Turn Option Strict On, вы не должны сравнивать цифры со строками.
Не повторяйте свой код.
DateTimePicker имеет свойство .Value, вам не нужно разбирать строку.

Dim startTime, endTime As TimeSpan 

startTime = Nothing 
endTime = Nothing 

Select Case Datetimepicker1.Value.DayOfWeek 
    Case DayOfWeek.Monday 
     startTime = new TimeSpan(8, 0, 0) 
     endTime = new TimeSpan(22, 30, 0) 
    Case DayOfWeek.Tuesday 
     startTime = new TimeSpan(8, 0, 0) 
     endTime = new TimeSpan(22, 30, 0) 
    Case DayOfWeek.Wednesday 
     startTime = new TimeSpan(8, 0, 0) 
     endTime = new TimeSpan(22, 30, 0) 
    Case DayOfWeek.Thursday 
     startTime = new TimeSpan(8, 0, 0) 
     endTime = new TimeSpan(22, 30, 0) 
    Case DayOfWeek.Friday 
     startTime = new TimeSpan(8, 0, 0) 
    Case DayOfWeek.Saturday 
     startTime = new TimeSpan(10, 0, 0) 
    Case DayOfWeek.Sunday 
     startTime = new TimeSpan(10, 0, 0) 
End Select 

If (startTime IsNot Nothing AndAlso Datetimepicker1.Value.TimeOfDay < startTime) Or _ 
    (endTime IsNot Nothing AndAlso Datetimepicker1.Value.TimeOfDay > endTime) Then 
    errors.Enqueue("The booking slot must be within the open hours") 
End If 

Шкала выбора может легко быть в словаре и сохранена как настройка.