我使用的扩展方法返回平日的量时间跨度,甚至是两个日期之间的完整日期列表,那么您可以针对IEnumerable运行一个lambda表达式来获得所需的内容。下面是静态类的一个非常基本的例子:
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);
如果你只是想工作日的时间跨度计数执行以下操作:
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 ) –