为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
牧羊人nacy 2021-11-21 16:10:35
假设我有一年,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。考虑所有可能的范围情况的最佳逻辑是什么?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

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


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.


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信