我正在编写服务,但我想要配置设置,以确保该服务不会在一周中的某一天的某个时间窗口内运行。例如,周一17:00至19:00。
是否有可能创建一个代表任何星期一的日期时间,因此我可以为DontProcessStartTime提供一个App配置密钥,为DontProcessEndTime设置一个值为“Monday 17:00”和“Monday 19:00”的值?
否则我假设我必须有时间窗口开始和结束的日期和时间的单独键。
有什么想法吗?
感谢
答案 0 :(得分:4)
您可以使用一个实用程序将您的工作日文本解析为System.DayOfWeek枚举example here。然后,您可以使用Enum与DateTime.Now.DayOfWeek
答案 1 :(得分:2)
您可以在配置文件中保存星期几并开始小时和结束时间,然后使用类似于以下内容的功能:
public bool ShouldRun(DateTime dateToCheck)
{
//These should be read from your config file:
var day = DayOfWeek.Monday;
var start = 17;
var end = 19;
return !dateToCheck.DayOfWeek == day &&
!(dateToCheck.Hour >= start && dateToCheck.Hour < end);
}
答案 2 :(得分:1)
您可以使用DayOfTheWeek
的{{1}}属性。
并且要检查适当的时间,您可以使用DateTime
(将日期时间设置为今天,时间设置为00:00:00)并添加必要的小时和分钟数。
答案 3 :(得分:1)
这是非常粗略的代码,但说明您可以根据需要检查包含当前时间的DateTime对象:
protected bool IsOkToRunNow()
{
bool result = false;
DateTime currentTime = DateTime.Now;
if (currentTime.DayOfWeek != DayOfWeek.Monday && (currentTime.Hour <= 17 || currentTime.Hour >= 19))
{
result = true;
}
return result;
}
答案 4 :(得分:1)
DateTime
对象无法处理意味着所有星期一的值。它必须是特定的星期一。有一个DayOfWeek
枚举。可能对您有帮助的另一个对象是TimeSpan
对象。您可以使用DayOfWeek
与TimeSpan
结合使用来告诉您何时开始,然后使用其他TimeSpan
告诉您多长时间