如何在DateTime值数组中查找平均日期/时间

c00*_*0fd 16 c# datetime average

如果我有一个DateTime值数组:

List<DateTime> arrayDateTimes;
Run Code Online (Sandbox Code Playgroud)

在它们中找到平均DateTime的方法是什么?

例如,如果我有:

2003-May-21 15:00:00
2003-May-21 19:00:00
2003-May-21 20:00:00
Run Code Online (Sandbox Code Playgroud)

平均值应该是:

2003-May-21 18:00:00
Run Code Online (Sandbox Code Playgroud)

Dam*_*ith 13

如果您有大型列表,可以使用以下方法

var count = dates.Count;
double temp = 0D;
for (int i = 0; i < count; i++)
{
    temp += dates[i].Ticks / (double)count;
}
var average = new DateTime((long)temp);
Run Code Online (Sandbox Code Playgroud)

  • 它将抛出大型列表的溢出异常. (7认同)

neo*_*r99 7

这不应该溢出,它确实假设日期时间是有序的,但:

var first = dates.First().Ticks;
var average = new DateTime(first + (long) dates.Average(d => d.Ticks - first));
Run Code Online (Sandbox Code Playgroud)

事实上,上面确实溢出了更大的列表和更大的间隙.我认为你可以用秒来获得更好的射程.(再次,排序第一)此外,这可能不是最高性能的方法,但仍然完成10M日期对我来说相对较快.不确定是否更容易阅读,YYMV.

var first = dates.First();
var average = first.AddSeconds(dates.Average(d => (d - first).TotalSeconds));
Run Code Online (Sandbox Code Playgroud)