【问题标题】:Regular DateTime question常规日期时间问题
【发布时间】:2010-10-29 23:56:00
【问题描述】:

我正在编写一项服务,但我想进行配置设置以确保该服务不会在一周中的某一天的特定时间窗口内运行。例如星期一的 17:00 到 19:00。

是否可以创建一个代表任何星期一的日期时间,这样我就可以为 DontProcessStartTime 和 DontProcessEndTime 设置一个应用配置键,其值如“Monday 17:00”和“Monday 19:00”?

否则我假设我必须为时间窗口的开始和结束分别设置日期和时间键。

有什么想法吗?

谢谢

【问题讨论】:

    标签: c# .net datetime windows-services


    【解决方案1】:

    您可以使用一个实用程序将您的工作日文本解析为 System.DayOfWeek 枚举 example here。然后,您可以使用 Enum 与 DateTime.Now.DayOfWeek 进行比较

    【讨论】:

    • .NET 4.0 中有 Enum.TryParse 泛型方法
    • @Andrew Bezzub - 很高兴知道,很棒的评论!
    • 如果您不使用 .NET 4.0,DateTime 结构也有一个 TryParse 方法。
    • @Fischer - DateTime.TryParse 会从“星期一 17:00”中提取任何有用的信息吗?
    • 我不确定,我认为有必要进行一些预处理。它只是作为 .NET 4.0 Enum.Parse 方法的替代品。
    【解决方案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);
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        DateTime 对象无法处理表示所有星期一的值。它必须是一个特定的星期一。有一个DayOfWeek 枚举。另一个可能对您有所帮助的对象是 TimeSpan 对象。你可以使用DayOfWeek 结合TimeSpan 告诉你什么时候开始,然后用另一个TimeSpan 告诉你多长时间

        【讨论】:

          【解决方案5】:

          这是非常粗略的代码,但说明您可以根据需要检查包含当前时间的 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;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-09-28
            • 2014-09-04
            • 2019-11-25
            • 2011-11-21
            • 2014-09-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多