常规日期时间问题

时间:2010-10-29 15:36:41

标签: c# .net datetime windows-services

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

是否有可能创建一个代表任何星期一的日期时间,因此我可以为DontProcessStartTime提供一个App配置密钥,为DontProcessEndTime设置一个值为“Monday 17:00”和“Monday 19:00”的值?

否则我假设我必须有时间窗口开始和结束的日期和时间的单独键。

有什么想法吗?

感谢

5 个答案:

答案 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对象。您可以使用DayOfWeekTimeSpan结合使用来告诉您何时开始,然后使用其他TimeSpan告诉您多长时间