Проверка вхождения времени в некоторый интервал на C#

Время

Представьте что вы пишете динамический сайт, и нужно, чтобы в зависимости от времени суток, пользовтель видел разные сообщения. Для каждого из возможных интервалов времени необходимо написать соответствующие условия и сообщения. Если учитывать переходы между сутками, то задача немного усложняется. В этой заметке я предлагаю простое решение в виде метода расширения для структуры TimeSpan.

Метод IsBetween кроме самого времени time принимает два дополнительных параметра — startTime и endTime:

    static class TimeSpanExtensions
    {
        static public bool IsBetween(this TimeSpan time,
                                      TimeSpan startTime, TimeSpan endTime)
        {
            if (endTime == startTime)
            {
                return true;
            }

            if (endTime < startTime)
            {
                return time <= endTime ||
                    time >= startTime;
            }

            return time >= startTime &&
                time <= endTime;
        }
    }

Использовать данный метод предельно просто:

if (!DateTime.Now.TimeOfDay.IsBetween(new TimeSpan(19, 0, 0), new TimeSpan(6, 0, 0)))
            {
                Console.WriteLine("Добро пожаловать!");
            }
            else
            {
                Console.WriteLine("Извените, сейчас мы закрыты. Время работы - с 9 з 19.");
            }

Обратите внимание на то, что в примере выше я проверяю именно то, время НЕ находится в интервале от 19 до 6 часов. Я намеренно сделал это чтобы показать что данный метод учитывает и переходы между сутками. Ведь следующая проверка не дала бы ожидаемого результата:

if (!(DateTime.Now.TimeOfDay > new TimeSpan(19, 0, 0) && DateTime.Now.TimeOfDay < new TimeSpan(6, 0, 0)))

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>