我有一个应用程序,需要在工作日内,并且在工作时间内运行。
在应用程序配置中,我已经设置了开始时间,格式为
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
枚举中,星期日是一周的第一天(参考MSDN页面的评论)。
我想我可以在当前代码上做些操作,但我正在寻找最可读的代码。
编辑 对于误解我感到抱歉 - 工作日不是从星期一到星期五 - 它们在配置文件中被定义为字符串,并且它们甚至可以从星期五到星期六 - 这会破坏我的原始代码。
<
或>
来评估枚举。问题在于,如果您添加/删除枚举选项(或重新排列它们的顺序),则必须搜查代码以找到所有 int 评估并更改它们。相反,使用显式的等式检查,例如if(myEnumValue == MyEnum.One || myEnumValue == MyEnum.Two)
而不是if((int)myEnumValue < 2)
。这样做可以提供类型安全性(不确定是否是正确的名称。我的意思是删除枚举选项将产生编译时错误),减少魔法数字,并提高可读性。 - Flater