Я использовал метод расширения для возврата суммы будней в промежуток времени или даже полный список дней между двумя датами, тогда вы можете запустить выражение лямбда против IEnumerable, чтобы получить то, что вам нужно. Вот очень простой пример статического класса:
public static class TimeSpanextensions
{
public static IEnumerable<DateTime> GetDays(this DateTime start, DateTime end, bool returnWeekDays = false)
{
List<DateTime> daysInSpan = new List<DateTime>();
//change following line to accomodate date format if needed
TimeSpan ts = start.Date - end.Date;
if(start < end)
{
DateTime _this = start;
while (_this < end)
{
_this = start.AddDays(1);
daysInSpan.Add(_this);
}
}
if(start > end)
{
DateTime _this = start;
while(_this > end)
{
_this = _this.AddDays(-1);
daysInSpan.Add(_this);
}
}
if(returnWeekDays)
{
return daysInSpan.Where(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday);
}
return daysInSpan;
}
Я использовал это на следующем примере:
public static IEnumerable<DateTime> WeekDays(DateTime one, DateTime two)
{
TimeSpan test = one - two;
return one.GetDays(two, true).ToList();
}
Это простой пример, чтобы вернуть дни или дней недели в отрезок времени, как фактический рабочий тип, а не дни TimeSpan типа int, которые возвращает TimeSpan. Итак, если у вас есть две даты StartDate и EndDate, вы просто сделаете следующее, чтобы получить будние дни, которые существуют в TimeSpane.
int count = Start < EndDate ? 1 : -1;
DateTime newDate = StartDate;
List<DateTime> allDaysList = new List<DateTime();
while(newDate != EndDate)
{
newDate = newDate.AddDays(count); //will eithr add or subtract a day
allDays.Add(newDate);
}
//now return either only weekdays days
allDays = allDays.Where(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday);
И если вы просто хотите, количество дней недели в TimeSpan сделать следующее:
int workDays = allDays.Where(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday).Count();
Вот несколько способов справиться с этой проблемой. Чтобы расширить это, вы просто создаете статический метод, который исключает это как аргумент. Например:
List<DateTime> weekDaysOnly = StartsDate.GetDays(endDate).ToList();
//then once again do your business day lambda expression here to leave your list with weekdays only. Hope this helps.
Возможно полезно: http://stackoverflow.com/questions/1617049/calculate-the-number-of-business-days-between-two-dates –
'Пятница-Monday' =>' 1', так каковы результаты для 'Friday-Saturday' и' Friday-Sunday'? –
Возможный дубликат [Рассчитать количество дней недели между двумя датами в C#] (http://stackoverflow.com/questions/1820173/calculate-the-number-of-weekdays-between-two-dates-in-c-sharp) –