计算日期所涵盖的包含日期的数量

我想要计算两个DateTimes之间涵盖的日期数(包括在内)。

这不是.TotalDays作为小于24小时的时段可能仍然通过重叠两个不同的日期返回“2”。 同样,相隔两分钟的日期仍应返回“1”。

例如:

 2012-2-1 14:00 to 2012-2-2 23:00 -> 2 (1st and 2nd Feb) 2012-2-1 14:00 to 2012-2-2 10:00 -> 2 (1st and 2nd Feb) 2012-2-1 23:00 to 2012-2-2 00:00 -> 2 (1st and 2nd Feb) 2012-2-1 23:00 to 2012-2-3 00:00 -> 3 (1st, 2nd, 3rd Feb) 2012-2-1 14:00 to 2012-2-1 15:00 -> 1 (1st Feb) 2012-2-1 14:00 to 2012-2-1 14:00 -> 1 (1st Feb) 2012-1-1 00:00 to 2012-12-31 23:59 -> 366 (All of 2012) 

我可以使用以下代码获得此function:

 DateTime dt1 = new DateTime(2000,1,2,12,00,00); DateTime dt2 = new DateTime(2000,1,3,03,00,00); int count = 0; for (DateTime date = dt1; date.Date <= dt2.Date; date = date.AddDays(1)) count++; return count; 

有没有更好的办法?

为什么不呢:

 int count = dt1.Date.Subtract(dt2.Date).Duration().Days + 1; 

使用.Date将Date标准化为午夜(0:00),将Days加1以获取不同日期的数量,而不仅仅是两者之间的天数。

使用Duration可确保您始终获得肯定答案。

也许简单

 TimeSpan duration = dt2.Date - dt1.Date; int days = duration.Days + 1; 

演示

 DateTime d1=DateTime.MinValue; DateTime d2=DateTime.MaxValue; TimeSpan span=d2-d1; int counter = span.Days + 1; 

Math.Ceiling((d2 – d1.Date).TotalDays)

试过你提到的所有案例。 结果是预料之中的! 希望能帮助到你。