在C#中,如何计算两个日期之间的工作日差异?
我知道我可以使用以下公式计算两个日期之间的天数差:在C#中,如何计算两个日期之间的工作日差异?,c#,datetime,timespan,C#,Datetime,Timespan,我知道我可以使用以下公式计算两个日期之间的天数差: private int DaysFromStart(DateTime date, DateTime startDate) { var days = date.Subtract(startDate); return (int)days.TotalDays; } 但是现在我想通过得到两个日期之间的差异,只包括工作日。例如,如果开始日期是星期五,要检查的日期是下一个星期一,那么返回值将是1。考虑下面的代码片段 int allDay
private int DaysFromStart(DateTime date, DateTime startDate)
{
var days = date.Subtract(startDate);
return (int)days.TotalDays;
}
但是现在我想通过得到两个日期之间的差异,只包括工作日。例如,如果开始日期是星期五,要检查的日期是下一个星期一,那么返回值将是1。考虑下面的代码片段
int allDays = (int)date.Subtract(startDate).TotalDays;
int weekDays = Enumerable
.Range(1, allDays)
.Select(day => startDate.AddDays(day))
.Count(day => day.DayOfWeek != DayOfWeek.Saturday && day.DayOfWeek != DayOfWeek.Sunday);
祝你好运 这将为您提供剩余的天数(不包括周日和周六)。变量
start
和end
表示开始和结束日期:
int DaysLeft = 0;
for (int i = 1;i <= (int)end.Subtract(start).TotalDays;i++)
{
DayOfWeek day = start.AddDays(i).DayOfWeek;
DaysLeft = (day == DayOfWeek.Sunday) || (day == DayOfWeek.Saturday)?DaysLeft:DaysLeft + 1;
}
int DaysLeft=0;
对于(int i=1;i我使用扩展方法返回一个时间跨度内的工作日数,甚至返回两个日期之间的天数的完整列表,然后可以对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;
}
这是处理此问题的不同方法。要扩展此方法,只需创建一个静态方法,将其作为参数。例如:
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.
List weekDaysOnly=StartsDate.GetDays(endDate.ToList();
//然后再一次在这里做你的工作日lambda表达式,只在工作日留下你的列表。希望这对你有所帮助。
可能有用:周五-周一
=>1
,那么周五-周六
和周五-周日
的结果是什么?更新的答案可能重复。请重试。
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.