如何检查当天是否为工作日

Nem*_*ric 18 c#

我的应用程序需要在工作日和工作时间内运行.

在应用程序配置中,我以格式设置了开始时间

Monday-Friday
9:00AM-5:30PM
Run Code Online (Sandbox Code Playgroud)

现在,我有一个问题,如何检查当前是否在一天的范围内(时间很容易 - 解析时间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 */ }
Run Code Online (Sandbox Code Playgroud)

sr.start_day并且sr.end_day是字符串

但问题发生在周末测试期间 - 显然,在DayOfWeek enum星期日是一周的第一天(参见MSDN页面上的评论)

我想我可以用现有代码做一些体操,但我正在寻找最易读的代码.

编辑 抱歉误解 - 工作日不是从星期一到星期五 - 它们在配置文件中被定义为字符串,它们甚至可以从星期五到星期六 - 这会破坏我的原始代码.

Hog*_*gan 13

if ((day >= DayOfWeek.Monday) && (day <= DayOfWeek.Friday))
{
    // action
}
Run Code Online (Sandbox Code Playgroud)


Nem*_*ric 12

来自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
}
Run Code Online (Sandbox Code Playgroud)


小智 5

日期时间的扩展

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