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

21
задан scottm 26 February 2009 в 20:17
поделиться

4 ответа

Если 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 с, Вы могли бы сказать

IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay)
45
ответ дан 29 November 2019 в 20:13
поделиться

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

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

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
2
ответ дан 29 November 2019 в 20:13
поделиться

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

Тот способ, которым Вы не должны постоянно проверять, ли "теперь" "между запуском и концом" времена.

1
ответ дан 29 November 2019 в 20:13
поделиться

если (текущий> = запускают & & текущий < = остановка)

(или без =)

я думаю, что это - все, в чем Вы нуждаетесь?

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

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

0
ответ дан 29 November 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: