Я использовал метод расширения, чтобы вернуть количество дней недели в промежутке времени или даже полный список дней между двумя датами, затем вы можете запустить лямбда-выражение для 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.
person
Casey
schedule
09.02.2014
Friday-Monday
= ›1
, так каковы результаты дляFriday-Saturday
иFriday-Sunday
? - person King King   schedule 28.11.2013