Как проверить, находится ли текущее время между временными рамками?

У меня есть служба, которую пользователь может настроить для запуска в течение «непиковых» часов. У них есть возможность установить временные frameworks, которые может выполнять служба.

Например:

Пользователь A работает с 8 утра до 5 вечера, поэтому они хотят запланировать запуск приложения с 17:30 до 7:30.

Пользователь B работает с 21:00 до 18:00, поэтому они планируют приложение работать с 6:30 до 20:30.

Дело в том, что приложение использует свой компьютер, пока это не так.

Учитывая DateTime текущего времени, DateTime начала и DateTime времени остановки, как я могу проверить, находится ли ток между началом и остановкой.

Сложная часть для меня заключается в том, что время может пересечь границу полуночи.

Если startTime и endTime представляют один временной интервал (это произойдет только один раз, а startTime и endTime представляют дату и время начала / остановки), тогда это так же просто, как сказать

 bool isTimeBetween = someTime >= startTime && someTime <= endTime; 

Если это повторяющееся событие (происходит каждый день, в течение некоторого интервала), вы можете выполнять сравнения с использованием свойства TimeOfDay . (Повторяющийся случай - это тот, где вы должны рассмотреть старт / стоп, который пересекает полночь)

 static public bool IsTimeOfDayBetween(DateTime time, TimeSpan startTime, TimeSpan endTime) { if (endTime == startTime) { return true; } else if (endTime < startTime) { return time.TimeOfDay <= endTime || time.TimeOfDay >= startTime; } else { return time.TimeOfDay >= startTime && time.TimeOfDay <= endTime; } } 

(Примечание: этот код предполагает, что если start == end , то он охватывает все времена. Вы сделали комментарий к этому вопросу на другом посту)

Например, чтобы проверить, находится ли он между 5:00 и 21:30

 IsTimeOfDayBetween(someTime, new TimeSpan(5, 0, 0), new TimeSpan(21, 30, 0)) 

Если startTime и endTime - DateTime s, вы можете сказать

 IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay) 

Поэтому я предполагаю из вопроса, который вы хотите знать, если задано время начала и окончания времени на день (не включая фактическую дату, то есть 1/1/1900 или что-то в этом роде), чтобы увидеть, если другое время со временем указанными в начале и в конце. Например, если начало 9 вечера и конец 9 утра, примите 10 вечера, но отклоните 10 утра.

Вы можете сделать это либо для типов временного диапазона (времена равны, конец – после начала, конец – перед запуском), что просто:

 if (end==start) return true else if (end>start) return start<=time && time<=end else return !(time>end && time 

Или вы можете расширить диапазон начала и конца, чтобы конец всегда начинался как таковой:

 if (end<=start) end += <24 hours> if (time return time<=end 

Я предполагаю, что вы сохраняете время начала и окончания файла конфигурации приложений, поэтому все, что вам в основном нужно сделать, – это указать, что ваше приложение установило флаг «on», когда происходит «время начала», и установите его «выключено», когда происходит время остановки.

Таким образом, вам не нужно постоянно проверять, существует ли «сейчас» «время начала и конца».

if (current> = start && current <= stop)

(или без =)

Я думаю, что это все, что вам нужно?

полуночная граница – красная сельдь – все, что вам нужно знать, – это статус обоих сравнений.

Если вы делаете такие вещи, как выходные дни по-разному, то у вас есть другая логика, но базовое сравнение простое.

 DateTime t1; t1 = DateTime.Now; // loop inbetween start and end time if (t1>=start_time &&t1<=end_time) { //your code / action } //if you are using sql to get values start_time = Convert.ToDateTime(row.Cells[10].Text); end_time = Convert.ToDateTime(row.Cells[11].Text); //convert them to string or you will get some error!!! 
  • Что случилось с API Java Date & Time?
  • Поддерживает ли Javascript / EcmaScript3 синтаксический анализ даты ISO8601?
  • Можете ли вы определить часовой пояс из переменных запроса?
  • Как группировать по неделям в MySQL?
  • вычисление разницы во времени в R
  • Как найти количество дней между двумя датами / DateTimePickers
  • Почему DateTime.ParseExact () не может анализировать «9/1/2009» с использованием «M / d / yyyy»
  • Разбор JSON DateTime от JSON Serializer от Newtonsoft
  • Преобразование многих форматов даты-времени в один стандартный формат
  • Как присоединиться к двум файлам данных, для которых значения столбцов находятся в определенном диапазоне?
  • Учитывая объект DateTime, как мне получить дату ISO 8601 в строчном формате?
  • Давайте будем гением компьютера.