C#中是否存在可返回指定日期区间为7天的内置函数?
如何在C#中计算包含起止日期的总天数
嘿,这个问题其实挺常见的!先给你捋明白为啥当前代码返回6:TimeSpan.TotalDays算的是两个日期之间的纯时间间隔长度,它不会把起始日和结束日都算进去。比如从5月2日到5月8日,中间是6个完整的“整天跨度”(2号到3号是1天,一直到7号到8号是第6天),所以返回6是合理的,但这和你想要的“包含首尾两天的一周(7天)”不是同一个概念。
C#里没有直接返回这种包含式天数的现成函数,但只需要简单调整就能实现,给你几个实用的方案:
基础调整法(兼容所有.NET版本):在间隔天数的基础上加1就行,注意先处理日期顺序避免负数:
// 先确保计算的是结束日减起始日,再取绝对值(防止日期顺序搞反),最后加1 double totalInclusiveDays = Math.Abs((endDate - startDate).TotalDays) + 1; // 对应你的例子:(5/8 - 5/2).TotalDays是6,加1后正好是7整数天数专用法:如果你的日期都是不带时分秒的“纯日期”,可以直接用
Days属性再加1,结果是整数:int totalInclusiveDays = (endDate - startDate).Days + 1;.NET 6+更优雅的方式:用
DateOnly类型(专门处理日期,完全避开时间部分的干扰):DateOnly start = DateOnly.Parse("2017-05-02"); DateOnly end = DateOnly.Parse("2017-05-08"); int totalDays = (end.DayNumber - start.DayNumber) + 1; // 结果就是7
本质上核心逻辑就是间隔天数 + 1——因为你要把起始和结束的两天都包含进去,这样就符合你直觉里的“一周7天”啦。
内容的提问来源于stack exchange,提问作者Dom Sinclair
相关产品推荐
相关产品推荐

