2010-10-29 194 views
3

我在写一个服务,但我想要配置设置以确保该服务不会在一周中的某一天的特定时间窗口内运行。例如周一17:00至19:00。定期日期时间问题

是否有可能创建代表任何星期一的日期时间,以便我可以为DontProcessStartTime配置一个应用配置密钥,并为DontProcessEndTime配置一个类似“星期一17:00”和“星期一19:00”的值?

否则,我假设我必须为时间窗口的开始和结束分配一天的时间和时间。

有什么想法?

感谢

回答

4

您可以使用一个实用工具,将您的工作日文本解析为System.DayOfWeek枚举,example here。然后,您可以使用枚举在对阵DateTime.Now.DayOfWeek

+1

有Enum.TryParse泛型方法在.NET 4.0中 – 2010-10-29 15:44:07

+0

@Andrew Bezzub - 好知道,伟大的评论! – Lazarus 2010-10-29 15:46:51

+0

如果您不使用.NET 4.0,则DateTime结构也具有TryParse方法。 – 2010-10-29 15:52:20

1

可以使用DateTimeDayOfTheWeek财产。 并检查适当的时间,您可以使用DateTime.Today(返回日期时间设置为今天与时间设置为00:00:00),并添加必要的小时数和分钟数。

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; 
} 
2

你可以保存一周的一天,并在您的配置文件启动小时endhour,然后使用类似如下的功能:

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); 
} 
1

DateTime对象不能处理的值,这意味着所有星期一。它必须是特定的星期一。有一个DayOfWeek枚举。另一个可能帮助你的对象是一个TimeSpan对象。您可以使用DayOfWeekTimeSpan相结合,告诉你什么时候开始,然后用另一TimeSpan告诉你多久