Как я могу проверить, работает ли текущий день?
У меня есть приложение, которое нужно запускать в рабочие дни и в рабочее время.
В конфигурации приложения я установил время начала в формате
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
Извините за недоразумение - рабочие дни не с понедельника по пятницу - они определены как строки в файле конфигурации, и они могут быть даже с пятницы по субботу, что нарушает мой первоначальный код.
Ответы
Ответ 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);
}
Предполагается, что воскресенье/суббота - это нерабочие дни. В противном случае пользователь может указать дни без работы. И это расширение для удобного использования.
Примечание. Чтобы избежать цикла, можно создать бит.
Ответ 7
Вы можете использовать перечисление DayOfWeek, чтобы узнать, есть ли дата в воскресенье или субботу. http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx Надеюсь, это поможет.
Ответ 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
}