判断两个DateTimes的时间差,只计算开始时间对于我们C#的配套软件,我需要判断两个DateTimes之间的时间跨度,但是我只想计算开放时间(即工作日从09:00到17:00)。因此,例如,如果第一个DateTime是15/02/201116:00,第二个是16/02/201110:00,该方法将返回2小时。任何帮助是极大的赞赏!日期时间开始=DateTime.Parse("15/02/201116:00");日期时间结束=DateTime.Parse("16/02/201110:00");整数计数=0;for(vari=start;i=9&&i.TimeOfDay.Hours我们开始吧,为你在这上面花了点时间。?有检测假期的空间(如果你写了一个函数来检查DateTime是否是假期),检测dates之间的周末,超过几个小时的处理.算法是计算营业开始到营业开始的时间和营业开始到结束的时间,然后计算中间的天数.落在同一个day是一个特例。警告:我做了一些基本测试,但可能没有得到所有的角落案例。publicstaticTimeSpanBusinessTimeDelta(DateTimestart,DateTimestop){if(start==stop)returnTimeSpan.Zero;如果(开始>停止){DateTimetemp=开始;开始=停止;停止=温度;}//首先,我们将截断这些DateTimes,以便它们在工作日内。//从一天开始到结束有多少时间?日期时间startFloor=StartOfBusiness(开始);DateTimestartCeil=CloseOfBusiness(开始);if(startstartCeil)start=startCeil;TimeSpanfirstDayTime=startCeil-开始;布尔工作日=真;//稍后保存双重检查if(!IsWorkday(start)){workday=false;firstDayTime=TimeSpan.Zero;}//从最后一天开始到结束有多少时间?DateTimestopFloor=StartOfBusiness(停止);DateTimestopCeil=CloseOfBusiness(停止);如果(停止stopCeil)停止=stopCeil;TimeSpanlastDayTime=stop-stopFloor;如果(!IsWorkday(stop))lastDayTime=TimeSpan.Zero;//此时所有日期都被截取到营业时间内。if(start.Date==stop.Date){if(!workday)//先前返回TimeSpan.Zero的预计算值;返回停止-开始;}//此时我们知道它们发生在不同的日期,因此我们可以使用//SOB和COB的偏移量。TimeSpantimeInBetween=TimeSpan.Zero;TimeSpanhoursInAWorkday=(startCeil-startFloor);//我尝试了很酷的数学方法而不是for循环,但这没有留下干净的方法来计算假期。for(DateTimeitr=startFloor.AddDays(1);itr使用LINQ:DateTimedt1=newDateTime(2010,10,1,16,0,0);DateTimedt2=newDateTime(2010,10,2,10,0,0);inthours=Enumerable.Range(1,(dt2-dt1).Hours).Where(h=>{vardt=dt1.AddHours(h);returndt.DayOfWeek!=DayOfWeek.Saturday&&dt.DayOfWeek!=DayOfWeek.Sunday&&dt.Hour>=9&&dt.Hour在这里,我假设所有分钟和秒都为零,否则(dt2-dt1)。小时将给出意想不到的值。试试看这是一个类似的问题:Calculateworkinghoursbetween2datetimes你可以试试这个算法:Calculatetotalhours(likeTotalHours=(Date2-Date1).TotalHours)Calculateholidays(holidays,includingWeekendsandotherholidays)Calculatethenumber工作日((Date2-Date1).TotalDays-Holidays)asintWorkingHours=TotalHours-24*Holidays-16*WorkingDays(16=第二天下午5点和晚上9点之间的时差)试试这个命名空间ConsoleApplication1{classProgram{staticvoidMain(string[]args){vardate1=newDateTime(2010,10,12,12,00,00);vardate2=newDateTime(2010,10,14,15,00,00);varhr1=((date1.Hour>9)&&(date1.Hour9)&&(date2.Hour}我试过了,可以:)以上是C#学习教程:确保两个DateTimes之间的差异只计算开场时间分享的全部内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表立场,如有涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处:
