我的应用程序需要在工作日和工作时间内运行 .
在应用程序配置中,我以格式设置了开始时间
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 page的评论)
我想我可以用现有代码做一些体操,但我正在寻找最易读的代码 .
Edit 对于误解感到抱歉 - 工作日不是从星期一到星期五 - 它们被定义为配置文件中的字符串,它们甚至可以从星期五到星期六 - 这会破坏我的原始代码 .
10 回答
来自Hans Passant's对我原来问题的评论:
DateTime的扩展
这是解决问题的优雅方案 . 这是一个可以轻松导入其他项目的类 . 编码允许程序员动态分配要检查的天数,并将它们作为字符串数组传递给类 . 当您将数据传递给此类的实例进行处理时,数据可以来自数据库或进行硬编码 . 如果你下班,它会返回True值,如果你那天工作,则返回False . 在课程下面我提供了一个简单的实现示例 . 这个类的特点是:动态分配你有什么日子,简单的错误处理程序通过在比较它们之前将字符串设置为小写,轻松地与具有你的工作计划的数据库集成,你的休假时间可能并不总是相同 . 轻松集成为硬编码天数 .
我们也可以采用类似的方法来检查给定的小时是否在两小时之间 . 以下是算法
我确定当天是否是工作日的简单解决方案是:
假设周日/周六是非工作日 . 否则,用户可以指定非工作日 . 并且是易于使用的扩展 .
注意:为避免循环,可能会创建一个位标志 .
您可以使用DayOfWeek枚举来查看日期是星期日还是星期六 . http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx我希望这可以提供帮助 .
以下行将返回“星期日”