假设我们有一个日期范围,例如: 2019-05-26 07:12:00 到 2019-11-26 19:15:00
>我们得到两个时间范围: 07:00 和 08:00 。
现在我必须计算这次重叠发生了多少次。
这是我到目前为止所写的内容,但我知道我在时段的开始和结束时会错过一些时间:
var breakfast = 0;
for (DateTime date = StartDate; date.Date <= EndDate; date = date.AddDays(1))
{
if (date.TimeOfDay >= new TimeSpan(0, 07, 00, 00) && date.TimeOfDay <= new TimeSpan(0, 08, 00, 00))
{
breakfast++;
}
}
///////
var lunch = 0;
for (DateTime date = StartDate; date.Date <= EndDate; date = date.AddDays(1))
{
if (date.TimeOfDay >= new TimeSpan(0, 13, 00, 00) && date.TimeOfDay <= new TimeSpan(0, 14, 00, 00))
{
lunch++;
}
}
任何帮助将不胜感激。
答案 0 :(得分:1)
现在,您说您有一个日期范围。 StartDate
和EndDate
。假设它们的值如下:
StartDate = new DateTime(2019,05,26,07,12); // "2019-05-26 07:12"
EndDate = new DateTime(2019,11,26,19,15); // "2019-11-26 19:15"
现在写时:
for (DateTime date = StartDate; date.Date <= EndDate; date = date.AddDays(1))
每次循环运行一次,每次迭代您都将获得date.TimeOfDay
作为07:12。这意味着,如果StartDate
的时间分量不在07:00到08:00范围之间,那么它也不会在循环中的其他任何一天下降。
因此,我们可以通过以下方式简化整个计数过程:
var breakfast = 0;
if (StartDate.TimeOfDay >= new TimeSpan(0, 07, 00, 00) && StartDate.TimeOfDay <= new TimeSpan(0, 08, 00, 00))
{
breakfast++;
breakfast += EndDate.Date.Subtract(StartDate.Date.AddDays(1)).Days;
if(EndDate.TimeOfDay >= new TimeSpan(0, 07, 00, 00))
breakfast++;
}