2010-10-29 153 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告訴你多久