我的应用程序需要在工作日和工作时间内运行.
在应用程序配置中,我以格式设置了开始时间
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)