Как проверить, находится ли текущее время между временными рамками?
У меня есть служба, которую пользователь может настроить для запуска в течение «непиковых» часов. У них есть возможность установить временные frameworks, которые может выполнять служба.
Например:
Пользователь A работает с 8 утра до 5 вечера, поэтому они хотят запланировать запуск приложения с 17:30 до 7:30.
- Лучшее время для летнего времени и часовых поясов
- Как я могу конвертировать секунды с эпохи в часы / минуты / секунды в Java?
- Как удалить временную часть даты на C # только в объекте DateTime?
- Разница между DateTime и временем в Ruby
- Секундомер против использования System.DateTime.Now для событий синхронизации
Пользователь B работает с 21:00 до 18:00, поэтому они планируют приложение работать с 6:30 до 20:30.
Дело в том, что приложение использует свой компьютер, пока это не так.
Учитывая DateTime текущего времени, DateTime начала и DateTime времени остановки, как я могу проверить, находится ли ток между началом и остановкой.
Сложная часть для меня заключается в том, что время может пересечь границу полуночи.
- Рекомендации по сериализации DateTime в .NET 3.5
- Совокупные ежедневные данные по месяцам / годам
- Java: преобразовать строку в TimeStamp
- Игнорирование часовых поясов в Rails и PostgreSQL
- Как получить текущую дату / время в Java
- Формат даты-времени как сезонов в R?
- Использование свойств DateTime в Code-First Entity Framework и SQL Server
- Как рассчитать возраст человека на C #?
Если 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!!!