日期范围内给定年份的天数
Number of days for a given year inside a date range
假设我有一年,2017 年。
然后我有一个日期范围,01/07/2017
- 01-07-2018
OR 01/07/2017
- 01-01-2017
OR 01/01/2016
- 01/01/2018
(<- 这应该 return 365 天)
我现在需要计算给定 year
的给定 range
中有多少 total days
。
请注意,日期存储为 dd/mm/yyyy,时间始终为 00:00:00。
考虑所有可能的范围情况,最佳逻辑是什么?
您可以轻松计算一年的开始日期和结束日期:
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# 具有 "extension everything",这些函数就可以编写为 DateTime
.
的静态扩展
假设我有一年,2017 年。
然后我有一个日期范围,01/07/2017
- 01-07-2018
OR 01/07/2017
- 01-01-2017
OR 01/01/2016
- 01/01/2018
(<- 这应该 return 365 天)
我现在需要计算给定 year
的给定 range
中有多少 total days
。
请注意,日期存储为 dd/mm/yyyy,时间始终为 00:00:00。
考虑所有可能的范围情况,最佳逻辑是什么?
您可以轻松计算一年的开始日期和结束日期:
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# 具有 "extension everything",这些函数就可以编写为 DateTime
.