2016-11-23 4 views
0

Я пытаюсь получить быстрый ETA на некоторых заранее определенных значениях 16 и 40. Так, например, мне нужен мой код для быстрого вычисления ETA на если он занимает 16 часов, но учитывается только 9-5 (8) часов в день. Очевидно, мне нужно будет включить оставшиеся часы того дня, которые у меня есть в коде, который вырезал ниже. Однако я даю себе слишком больную голову, пытаясь разработать лучший способ для продолжения работы с кодом. Может, у кого-то есть хорошая идея?Рассчитать X количество часов вперед только за 9-5 часов

Dim TargetTime as Integer = 16 
Dim currentHr As Integer = current.Hour 
Dim TodaysRemainingHours As Integer = 0 

If currentHr >= 9 AndAlso currentHr < 17 Then 
    'Count remaining hours 
    TodaysRemainingHours = (17- currentHr) 
Else 
    'Dont count today 
    TodaysRemainingHours = 0 
End If 

Мой план:

  • TargetTime - TodaysRemainingHours --- Дает значение для подсчета в.
  • Как-то вычислить часы на основе только 9-5 временных интервалов.

  • Дисплей lblOutput как: «ЭТА: 2 вечера 25/11/2016»

Как вы можете видеть, что я знаю, как получить vaule мне нужно посчитать, но мне нужна помощь с первых только считая часы в каждый день от 9 до 5, а затем возвращающий фактический час. Это не выгодно, это личная программа ETA.

+2

Поскольку ваши периоды времени кратные 8 в любом случае, почему бы вам просто не подсчитать количество «дней» (то есть, 2 или 5) из 'Now'? Если вы начнете в 10:30 Вт, ETA будет 10:30 Thur (или 10:30 Sun). – topshot

ответ

0

Thank you topshot, ваш комментарий помог мне разобраться! Следующий код, похоже, работает для меня, я все равно не выявил никаких проблем. Я должен был убедиться, что я не буду считать оставшиеся часы в текущем дне, если время прошло и в 5 вечера. Спасибо.

 Dim TargetTime As Integer = 16 
     Dim current As Datetime = DateTime.now 
     Dim currentHr As Integer = current.Hour 
     Dim TodaysRemainingHours As Integer = 0 

     If currentHr >= 9 AndAlso currentHr < 17 Then 
      'Count remaining hours 
      TodaysRemainingHours = (17 - currentHr) 
     Else 
      'Dont count today 
      TodaysRemainingHours = 0 
     End If 

     If currentHr >= 9 AndAlso currentHr < 17 Then 
     'Deduct todays hours from target time. 
     TargetTime = (TargetTime - TodaysRemainingHours) 
      'Display results 
      MsgBox("ETA: " & Now.AddDays(TargetTime/8)) 
      Else 
     'Skip todays hours and count from tomorrow morning at 9am 
      Dim Tomorrow As DateTime = Today.AddDays(1) 
      Dim TomorrowMorning As TimeSpan = new TimeSpan(09, 00, 0) 
      Tomorrow = Tomorrow.Date + TomorrowMorning 
      'Display results 
      MsgBox("ETA: " & Tomorrow.AddDays(TargetTime/8)) 
      End If 
Смежные вопросы