2008-10-03 91 views
10

計算自日期以來工作天數的最簡單方法是什麼?首選VB.NET,但C#沒問題。.NET Date比較:計算自日期以來的工作天數?

而「工作日」是指除週六和週日外的所有日子。如果算法也可以考慮不應該算作工作日的特定「排除」日期列表,那將是肉汁。

在此先感謝貢獻的天才。

回答

16

這將做你想做的。它應該很容易轉換爲VB.NET,但我能夠做到這一點太長了。

DateTime start = DateTime.Now; 
DateTime end = start.AddDays(9); 
IEnumerable<DateTime> holidays = new DateTime[0]; 

// basic data 
int days = (int)(end - start).TotalDays; 
int weeks = days/7; 

// check for a weekend in a partial week from start. 
if (7- (days % 7) <= (int)start.DayOfWeek) 
    days--; 
if (7- (days % 7) <= (int)start.DayOfWeek) 
    days--; 

// lose the weekends 
days -= weeks * 2; 

foreach (DateTime dt in holidays) 
{ 
    if (dt > start && dt < end) 
     days--; 
} 
1

Here's SQL Server的一種方法。在頁面上也有一個vbscript方法。不知道你要求什麼,我知道。

13

最簡單的方法可能是類似

DateTime start = new DateTime(2008, 10, 3); 
DateTime end = new DateTime(2008, 12, 31); 
int workingDays = 0; 
while(start < end) { 
    if(start.DayOfWeek != DayOfWeek.Saturday 
    && start.DayOfWeek != DayOfWeek.Sunday) { 
     workingDays++; 
    } 
    start = start.AddDays(1); 
} 

它可能不是最有效的,但它確實允許假期的列表便於檢查。

+0

你的意思是檢查的週末。不是假期。 :D – ferventcoder 2008-10-03 06:36:37

1

我們將兩個CodeProject文章結合起來,以獲得完整的解決方案。我們的圖書館不夠簡潔,無法發佈爲源代碼,但我可以向您指出我們用來實現我們所需的兩個項目。與CodeProject文章一樣,閱讀評論,其中可能有重要的信息。

計算工作日:http://www.codeproject.com/KB/cs/busdatescalculation.aspx

替代工作日計算:http://www.codeproject.com/KB/cs/datetimelib.aspx

計算假期:http://www.codeproject.com/KB/dotnet/HolidayCalculator.aspx

1
一般

(無碼) -

  • 減日期得到的天數
  • 除以7得到週數
  • 周的
  • 減次數2
  • 數與日期範圍不同
  • 減去數

撥弄開始放假的日期數量/結束日期,以便他們落在週一到週一,然後加回差

[道歉無碼泛泛而談,它的晚]

[CF endDate.Subtract(startDate).TotalDays]

3

這裏是史蒂夫在VB式的無假日減法樣本:

Function CalcBusinessDays(ByVal DStart As Date, ByVal DEnd As Date) As Decimal 

     Dim Days As Decimal = DateDiff(DateInterval.Day, DStart, DEnd) 
     Dim Weeks As Integer = Days/7 
     Dim BusinessDays As Decimal = Days - (Weeks * 2) 
     Return BusinessDays 
     Days = Nothing 
     Weeks = Nothing 
     BusinessDays = Nothing 

End Function