c# - 日期范围内给定年份的天数
问题描述
假设我有一年,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。
考虑所有可能的范围情况,最好的逻辑是什么?
解决方案
您可以轻松计算一年的开始和结束日期:
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
参数并通过一些适当的重命名来完成上述操作)
1DateTime.Min(value1, value2)
我对和类似的有一些模糊的回忆,Max
但它绝对不在我能看到的 BCL 中。这些将替换以下行中的条件运算符。一旦 C# 具有“扩展所有内容”,这些函数就可以编写为DateTime
.
推荐阅读
- php - 在文件中找不到类 'App/User' .... 第 208 行的 WebhookController.php Laravel Cashier Stripe Webhook
- java - 新窗口中的 JavaFX 进度指示器不会“旋转”
- powershell - PowerShell 功能在 Windows 任务计划程序中不起作用
- angular - 我不能从另一个函数调用一个函数,因为它是未定义的
- html - 无法创建适合文本大小的 HTML Div 元素
- filter - 如何保留与特定模式匹配的行
- java - 如何将 BluetoothLeGatt BLE 扫描仪与地图合并,使其能够在后端自动扫描 BLE 设备?
- flutter - 如何在列表视图中显示对象的单个属性
- c++ - c++继承数据访问混乱
- linux - 尝试从未打开的文件中读取时,我的 libfuse 文件系统应该返回哪个系统错误?