当前位置: 首页 > 编程语言 > C#

计算给定时间段内的正常工作日分享

时间:2023-04-10 23:16:06 C#

计算给定时间段内的正常工作日需要一些帮助。我需要计算特定日期的正常工作日,例如在我们国家从周一到周五有5个正常工作日,那么在代码中我需要在计算时排除周六和周日。我需要在C#中使用类似的算法:intGetRegularWorkingDays(DateTimestartDate,DateTimeendDate){intnonWorkingDays=((endDate-startDate)%7)*2;返回(结束日期-开始日期)-非工作日;}我知道我的快乐起草:(。提前致谢。=)PS:伙计们请投票选出下面最好/最快/最有效的答案。谢谢=)查看代码项目中的这个示例,它使用了一种非常有效的方法,不涉及任何循环;)它使用了这个算法:TimeSpan以周为单位计算。称之为W。从周数中减去第一周。W=W-1周数乘以一周的工作日数。称之为D。查找指定时间跨度内的假期。称它为H。计算第一周的天数。叫它,SD。计算前一周的天数。叫它,艾德。总结所有的日子。BD=D+SD+EDH。衬垫!intworkingDays=Enumerable.Range(0,Convert.ToInt32(endDate.Subtract(startDate).TotalDays)).Select(i=>new[]{DayOfWeek.Saturday,DayOfWeek.Sunday}.Contains(开始日期.AddDays(i).DayOfWeek)?0:1).Sum();或者更有效:DayOfWeekcurrDay=startDate.DayOfWeek;int非工作日=0;foreach(variinEnumerable.Range(0,Convert.ToInt32(endDate.Subtract(startDate).TotalDays))){if(currDay==DayOfWeek.Sunday||currDay==DayOfWeek.Saturday)nonWorkingDays++;if((int)++currDay>6)currDay=(DayOfWeek)0;我写了一个类型扩展来允许我添加(或减去)给定日期的工作日。也许这会对你有所帮助。效果很好,如果对您有帮助,请为我的帖子投票。//////添加工作日到日期//////DateTime添加到///要添加的工作日数///DateTimepublicstaticDateTimeAddWeekdays(thisDateTimevalue,intweekdays){intdirection=Math.签名(工作日);intinitialDayOfWeek=Convert.ToInt32(value.DayOfWeek);//----------------------------------------------------------------------//如果当天是周末,则转移到下一个工作日再计算if((value.DayOfWeek==DayOfWeek.Sunday&&direction0)){value=value.AddDays(direction*2);工作日+=(方向*-1);//调整天数加一}elseif((value.DayOfWeek==DayOfWeek.Sunday&&direction>0)||(value.DayOfWeek==DayOfWeek.Saturday&&direction0)||(result.DayOfWeek==DayOfWeek.Saturday&&direction0)){result=result.AddDays(direction*2);}//----------------------------------------------------------------------返回结果;}不是很快,但是可以解决问题:intGetRegularWorkingDays(DateTimestart,DateTimeend){return(fromdayinRange(start,end)whereday.DayOfWeek!=DayOfWeek.Saturdaywhereday.DayOfWeek!=DayOfWeek.Sunday选择日期).Count();}IEnumerableRange(DateTimestart,DateTimeend){while(start你可以尝试一种简单的方法来计算天数.intGetWorkingDays(DateTimestartDate,DateTimeendDate){intcount=0;for(DateTimecurrentDate=startDate;currentDate你可以用一个时间线助手类来做到这一点——这个类还允许其他时间间隔:,DateTime.MaxValue);}publicstaticIEnumerableCreateTimeLine(DateTimestart,TimeSpaninterval,DateTimeend){varcurrentVal=start;varendVal=end.Subtract(interval);do{currentVal=currentVal.Add(interval);yieldreturncurrentVal;}while(currentVal要解决你的问题,你可以这样做:varworkingDays=TimeLine.CreateTimeLine(DateTime.Now.Date,TimeSpan.FromDays(1),DateTime.Now.Date.AddDays(30)).Where(x=>x.DayOfWeek!=DayOfWeek.Saturday&&x.DayOfWeek!=DayOfWeek.Sunday);varnoOfWorkingDays=workingDays.Count();这个时间线类可以用于任何间隔的任何连续时间线。获取工作日的简单方法:以上是C#学习教程:计算给定时间段内一个正常工作日分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注---intGetRegularWorkingDays(DateTimestartDate,DateTimeendDate){inttotal=0;if(startDateintcount=0;switch(dateTimePicker2.Value.DayOfWeek.ToString()){case"Saturday":count--;break;case"Sunday":count--;break;default:break;}开关(dateTimePicker3.Value.DayOfWeek.ToString()){case"Saturday":count--;break;case"Sunday":count--;break;default:break;}if(count==-2)计数=-1;intweeks=t.Days/7;intdaycount=count+t.Days-(2*weeks)+1;label7.Text="NoofDays:"+daycount.ToString();本文采集自网络且不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处: