【发布时间】:2012-12-20 10:57:49
【问题描述】:
我正在计算两个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)
我可以通过下面的代码获得这个功能:
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;
有没有更好的办法?
【问题讨论】:
-
d1.Date.Subtract(d2.Date).TotalDays + 1 怎么样
-
不确定它是如何复制的。同一天的两个日期仍应返回 1. 跨越两天的少于 24 小时的时间段应返回两天。
-
NodaTime 非常适合这种事情,参考:[如何使用 NodaTime 计算包含天数][1] [1]:stackoverflow.com/questions/10336863/…
-
这不是重复,因为它与指定的重复有不同的答案......