日期范围内给定年份的天数

k1d*_*dev 1 c# math date range date-range

说我有一年,2017年.

然后我有一个日期范围,01/07/2017- 01-07-2018 01/07/2017 - 01-01-2017 01/01/2016 - 01/01/2018(< - 这应该返回365天)

我现在需要计算total days给定range的给定数量year.

请注意,日期存储为dd/mm/yyyy,始终为00:00:00时间.

在考虑所有可能的范围情况时,最好的逻辑是什么?

Dam*_*ver 8

您可以轻松计算一年的开始和结束日期:

var start2017 = new DateTime(2017,1,1);
var end2017 = new DateTime(2017,12,31);
Run Code Online (Sandbox Code Playgroud)

然后你可以计算这个新范围和你的其他范围之间的重叠1:

var startOverlap = start2017 < startOtherRange ? startOtherRange : start2017;
var endOverlap = end2017 >  endOtherRange ? endOtherRange : end2017;

var totalDays = (endOverlap - startOverlap).TotalDays + 1;
Run Code Online (Sandbox Code Playgroud)

如果范围包括它们的开始和结束日期,则上述内容是正确的.如果你想,比方说,一个独特的端点,然后我们会调整了2017年计算范围1天进一步向前的结束,将不再需要+1在年底调整)

(我认为你可以从那里派生出如何将它变成一个函数,如果需要带year, startRange, endRange参数并通过一些适当的重命名来完成上述操作)


1我有一些模糊的回忆DateTime.Min(value1, value2)和类似的Max但是它绝对不是我能看到的BCL.这些将替换以下行中的条件运算符.一旦C#具有"扩展一切",这些函数就可以写成静态扩展DateTime.