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

时间:2018-08-09 12:30:10

标签: c# date math range date-range

说我有2017年。

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

我现在需要计算给定01/01/2018的给定total days中有多少range

请注意,日期存储为dd / mm / yyyy,且始终为00:00:00。

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

1 个答案:

答案 0 :(得分:8)

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

var start2017 = new DateTime(2017,1,1);
var end2017 = new DateTime(2017,12,31);

然后您可以计算此新范围与其他范围 1 之间的重叠

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

var totalDays = (endOverlap - startOverlap).TotalDays + 1;

如果范围意在包括其开始日期和结束日期,则上述说明是正确的。例如,如果您要使用排他性终点,则我们将对2017年计算范围的末尾进行进一步调整,并且不再需要在末尾进行+1调整

(我想您可以从那里获得如何将其变成一个函数,该函数需要使用year, startRange, endRange参数并通过适当的重命名来执行上述操作)


1 我对DateTime.Min(value1, value2)有一些模糊的回忆,对Max也有类似的回忆,但是我绝对不能在BCL中看到它。这些将替换以下行中的条件运算符。一旦C#“扩展了所有内容”,这些功能就可以作为对DateTime的静态扩展来编写。