You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何使用LINQ计算DateTime列表相邻日期的平均间隔天数

可以通过LINQ实现该需求,无需手动编写遍历逻辑,具体实现方案如下:

实现思路

利用LINQ的Zip方法配对相邻日期,计算间隔后直接求平均值,全程不需要手动写for/foreach循环。

完整代码示例

// 你的已排序日期列表
List<DateTime> sortedDates = new List<DateTime>
{
    new DateTime(2022,1,1),
    new DateTime(2022,1,2),
    new DateTime(2022,1,4)
};

// 计算平均间隔天数
double averageInterval = sortedDates.Count < 2 
    ? 0 // 元素不足2个时无相邻间隔,可根据业务需求调整返回值
    : sortedDates.Zip(sortedDates.Skip(1), (prev, curr) => (curr - prev).TotalDays)
                 .Average();

代码说明

  • 边界处理:首先判断列表长度,当列表元素少于2个时不存在相邻间隔,可根据业务需求返回0、null或抛出异常,示例中默认返回0
  • 相邻配对:sortedDates.Skip(1)会生成跳过第一个元素的新日期序列,和原序列通过Zip配对后,刚好得到「前一个日期、后一个日期」的相邻组合
  • 间隔计算:每对相邻日期的差值取TotalDays得到间隔天数的序列,直接调用Average()方法即可得到平均间隔天数

验证结果

用你给出的示例测试,最终得到的averageInterval值为1.5,和预期计算结果完全一致。

注意事项

该实现默认你的List<DateTime>已经按时间顺序完成排序,若列表未排序会导致计算结果错误,和手动遍历的前置要求一致。

内容的提问来源于stack exchange,提问作者Steve Kennedy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:45:07