计算DateTimes集合之间的平均TimeSpan

ada*_*ord 5 c# linq .net-4.0

假设我们正在跟踪用户执行某项操作的时间,并且我们想知道所述操作之间的平均时间.

例如,如果用户在以下时间执行此操作:

  • 今天下午1点
  • 今天下午3点
  • 今天下午6点

结果将是2.5小时.

我实际上已经解决了这个问题,但我觉得我的解决方案比必要的更复杂.我会发布它作为答案.

tof*_*tim 6

看来你基本上都在寻找Max - Min除以Count.

    public TimeSpan? Average
    {
        get
        {
            var diff = _dateTimes.Max().Subtract(_dateTimes.Min());
            var avgTs = TimeSpan.FromMilliseconds(diff.TotalMilliseconds / (_dateTimes.Count() - 1));
            return avgTs;
        }
    }
Run Code Online (Sandbox Code Playgroud)

确保检查是否存在多个DateTime.

更新:如果您使用Ticks,则更准确.

TimeSpan.FromTicks(diff.Ticks / (_dateTimes.Count() - 1));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果集合具有1个元素,则将获得div by 0异常。 (2认同)