2013-02-20 75 views
1

我想知道是否存在任何庫/方法,它允許總結天的日期時間,而不考慮「沒有工作的日子」像復活節,聖誕節,星期六等..如何計算基於DateTime和天一個經過時間在C#中度過

我知道存在的方法DateTime.Add,但這並沒有考慮「非工作日」。

非常感謝!

+2

這似乎相當特定於區域...不同的國家(甚至在某些情況下,不同的城市)有不同的公共假期。出於這個原因,我認爲它不太可能有一個通用庫。您需要爲任何通用庫提供假期列表,如果您有該列表可用,那麼無論如何你想做的事情都是微不足道的。 – 2013-02-20 15:17:59

+0

我週六工作過.. – 2013-02-20 15:18:00

+1

最後的評論如何有用?無論如何@Ziba Leah:你會爲此寫出自己的算法。我們做了很多日期操作,並且我不知道一個內置的方法可以完成你以後的工作,因爲其他人認爲它是特定於語言環境的。 – Risho 2013-02-20 15:22:28

回答

0

不,你必須定義自己的非工作日,並建立自己的功能。

0

有一個DateTime方法,將告訴你一週中的一天,所以你可以檢查週六/週日,但剩下的就是你。如果你打算在Office上使用它,那裏有一些可以使用的dll。否則,你可能會想要找到一個開源項目(其中有很多可以爲你計算出來)。

DateTime.Now.DayOfWeek

這將是非常特殊的區域,因此,如果您正在使用一個以上的國家,是值得考慮你的代碼計劃。而且,在美國,不同的州也有不同的假期。

0

我假設你想找到給定開始日期的東西的結束日期以及需要的工作天數?

如果是這樣,下面的代碼可能是你想要的。它假定你有一個你所支持的最大時間範圍內的所有假期列表。這可能是未來幾年,取決於您的要求!

這段代碼使用的起始日期和工作天數(和節假日列表)並返回結束日期。

public static DateTime AddWorkingDays(DateTime start, int workingDays, IEnumerable<DateTime> holidays) 
{ 
    var dict = new HashSet<DateTime>(holidays); 
    DateTime date; 

    for (date = start; workingDays > 0; date = date.AddDays(1)) 
    { 
     if (!dict.Contains(date)) 
     { 
      --workingDays; 
     } 
    } 

    return date; 
} 

另一種實現假定你可以調用一個謂詞,以確定是否每天都是假日:

public static DateTime AddWorkingDays(DateTime start, int workingDays, Predicate<DateTime> isHoliday) 
{ 
    DateTime date; 

    for (date = start; workingDays > 0; date = date.AddDays(1)) 
    { 
     if (!isHoliday(date)) 
     { 
      --workingDays; 
     } 
    } 

    return date; 
} 

這兩種實現從訪問每一個日期吃虧。這可能不是問題,但如果日期範圍很大,則可能太慢。

相關問題