2008-10-03 2 views
10

Какой самый простой способ вычислить количество рабочих дней с даты? VB.NET предпочла, но C# в порядке.. NET Date Compare: подсчитайте количество рабочих дней с даты?

И «рабочими днями», я имею в виду все дни, исключая субботу и воскресенье. Если алгоритм может также учитывать список конкретных «исключений», которые не должны считаться рабочими днями, это будет подливать.

Заранее благодарим за предоставленный гений.

ответ

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

3

DateDiff наряду с a few other Date* functions являются уникальными для VB.NET и часто являются предметом зависти от разработчиков C#. Не уверен, что это будет очень полезно в этом случае.

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
  • подсчитывают количество праздничных дат, которые падают с диапазоном дат
  • вычитают сосчитать

скрипки с началом/даты окончания, так что они падают с понедельника до понедельника, а затем добавить обратно разницу

[извинения за не-кода общностей, поздно]

[цит 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 
Смежные вопросы