2008-10-03 98 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