Как я могу проверить, работает ли текущий день? - программирование
Подтвердить что ты не робот

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

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

В конфигурации приложения я установил время начала в формате

Monday-Friday
9:00AM-5:30PM

Теперь у меня есть проблема с тем, как проверить, находится ли текущий день в пределах дня (время простое - время разбора с DateTime.ParseExact и простая ветка будет делать), но я не знаю, как разбирать дни.

Я пробовал:

DayOfWeek day = DateTime.Now.DayOfWeek;
if (day >= (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.start_day) &&
    day <= (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.end_day))
{ /* OK */ }

sr.start_day и sr.end_day являются строками

но проблема возникла во время тестирования на выходные - видимо, в DayOfWeek enum, воскресенье - первый день недели (со ссылкой на комментарии страница MSDN

Я предполагаю, что смогу сделать какую-то гимнастику с текущим кодом, но я ищу самый читаемый доступный код.

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

4b9b3361

Ответ 1

Из комментарий Hans Passant по моему оригинальному вопросу:

Просто добавьте 7 в конец дня, если он меньше начального дня. По аналогии, добавьте 7 дней, если это меньше, чем начальный день.

DayOfWeek day = DateTime.Now.DayOfWeek;
DayOfWeek start_day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.start_day);
DayOfWeek end_day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.end_day);

if (end_day < start_day)
    end_day += 7;

if (day < start_day)
    day += 7;

if (day >= start_day && day <= end_day)
{ 
   //Action
}

Ответ 2

if ((day >= DayOfWeek.Monday) && (day <= DayOfWeek.Friday))
{
    // action
}

Ответ 3

расширение для DateTime

public static bool IsWeekend(this DateTime date)
    {
        return new[] {DayOfWeek.Sunday, DayOfWeek.Saturday}.Contains(date.DayOfWeek);
    }

Ответ 4

Это изящное решение проблемы. Это класс, который можно легко импортировать в другие проекты. Кодирование позволяет программисту динамически назначать, какие дни нужно проверять, и передавать их как строковый массив в класс. Данные могут поступать из базы данных или быть жестко закодированы, когда вы передаете ее экземпляру этого класса для обработки. Он возвращает значения True, если вы не работаете, и False, если вы работаете в тот день. Ниже класса я представил простой пример реализации. Этот класс включает в себя: Динамическое распределение времени, которое вы отключили, Простой обработчик ошибок, установив строки в нижнем регистре, прежде чем сравнивать их. Легко интегрируется с базой данных, в которой есть рабочий график, когда ваши выходные дни могут не совпадать. Легко интегрируется как жестко закодированное количество выходных дней.

// The Class To Check If You're Off Work

class DayOffChecker
{
    public bool CheckDays(List<string> DaysOff)
    {
        string CurrentDay = DateTime.Now.DayOfWeek.ToString();
        CurrentDay.ToLower();
        foreach (string DayCheck in DaysOff)
        {
            DayCheck.ToLower();
            if (CurrentDay == DayCheck)
            {
                return (true);
            }
        }
        return (false);
    }
}

// Example usage code:

class Program
{
    List<string> DaysOff = List<string>();
    DaysOff.Add("Saturday");  // Add some values to our list.
    DaysOff.Add("Sunday");
    DayOffChecker CheckToday = new DayOffChecker();
    if(CheckToday.CheckDays(DaysOff))
    {
        Console.WriteLine("You're Off Today!!!");
    }
}

Ответ 5

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

checkIfFallsInRange(index,start,end)

bool normalPattern = start <= end ;

if ( normalPattern)
   return index>=start && index<=end;
else
  return index>=start || index <=end;

Ответ 6

Мое простое решение определить, является ли текущий день рабочим днем ​​или нет:

public static bool IsWorkDay(this DateTime dt)
{
    return IsWorkDay(dt, DayOfWeek.Sunday, DayOfWeek.Saturday);
}

public static bool IsWorkDay(this DateTime dt, params DayOfWeek[] noneWorkDays)
{
    return !noneWorkDays.Contains(dt.DayOfWeek);
}

Предполагается, что воскресенье/суббота - это нерабочие дни. В противном случае пользователь может указать дни без работы. И это расширение для удобного использования.

Примечание. Чтобы избежать цикла, можно создать бит.

Ответ 8

В приведенной ниже строке вернется "воскресенье"

string nameOfTheDay = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("en-GB")).ToLower();

if(nameOfTheDay != "sunday" && nameOfTheDay != "saturday")
{
//Do Stuff
}

Ответ 9

    public bool IsWeekend(DateTime dateToCheck)
    {
        DayOfWeek day = (DayOfWeek) dateToCheck.Day;
        return ((day == DayOfWeek.Saturday) || (day == DayOfWeek.Sunday)); 
    }

Ответ 10

DayOfWeek Day = DateTime.Today.DayOfWeek;
int Time = DateTime.Now.Hour;
if (Day != DayOfWeek.Saturday && Day != DayOfWeek.Sunday)
 {
 if (Time >= 8 && Time <= 16)
 {
   //It is Weekdays work hours from 8 AM to 4 PM
 {
 }
else
 {
   // It is Weekend
 }