Как я могу проверить, находится ли текущее время в промежутке времени? - PullRequest
21 голосов
/ 26 февраля 2009

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

Например:

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

Пользователь B работает с 9 вечера до 6 утра, поэтому он планирует запуск приложения с 6:30 до 20:30.

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

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

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

Ответы [ 5 ]

45 голосов
/ 26 февраля 2009

Если 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 утра и 9:30 вечера

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

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

IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay)
2 голосов
/ 27 февраля 2009

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

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

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

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

if (end<=start) end += <24 hours>
if (time<start) time+= <24 hours>
return time<=end
1 голос
/ 26 февраля 2009

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

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

0 голосов
/ 25 июня 2015
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!!!
0 голосов
/ 26 февраля 2009

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

(или без =)

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...