【问题标题】:C# Time Average [closed]C#时间平均[关闭]
【发布时间】:2016-03-09 14:36:09
【问题描述】:

如何计算给定列表的平均值,内容如下所述:

06:56
06:58
06:55
06:54
06:54
06:53
06:55
06:53
06:58
06:54
06:58
06:55
06:54
06:50
06:54
06:57

有什么想法吗?!?

【问题讨论】:

  • 这个列表是如何声明的?哪个Type
  • 在 C# 中只有一行代码,请不要发布它,如果有什么不适合的,我们会尽力帮助您...
  • 将其转换为小数(整小时、小数分钟),然后取平均值。
  • 这只是一个包含一堆日期时间格式的小时条目的列表。
  • 为什么这么残忍的家伙?他在这里问了第二个问题……

标签: c# list time average


【解决方案1】:
        var times = new List<string>
        {
            "06:56",
            "06:58",
            "06:55",
            "06:54",
            "06:54",
            "06:53",
            "06:55",
            "06:53",
            "06:58",
            "06:54",
            "06:58",
            "06:55",
            "06:54",
            "06:50",
            "06:54",
            "06:57"
        };
        var average = times
            .Select(TimeSpan.Parse)
            .Average(x => x.TotalMilliseconds);

        var averageTime = TimeSpan.FromMilliseconds(average);

【讨论】:

  • 这里有一个变化:[查找时间跨度集合的平均值]stackoverflow.com/a/8847711/3527297 对刻度进行平均(尽管不是这里的示例数据)可能为亚秒值提供更高的精度。
【解决方案2】:

将值转换为 TimeSpan。您可以直接将输出作为正确的数据类型进行平均。

附录

添加来自@gabba 的答案,提供字符串列表和上面使用刻度的链接,您可以通过这种方式计算平均值:

TimeSpan average = new TimeSpan(Convert.ToInt64(times.Average(x => TimeSpan.Parse(x).Ticks)));

结果值当然是一样的:06:54:52.500

【讨论】:

  • 谢谢各位!我会试试你建议的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2014-05-26
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多