今天小Z一兄弟在项目上遇到了一个求平均上下班时间的算法需求,他采用转换成时间戳tickets的算法进行计算,会出现溢出的异常。小Z考虑这个问题,提出取差值计算的算法。理论公式为:
平均上班时间 = (a1 + a2 + ..+ an)/ days
= ((a1 - A)+(a2 - A)+...+(an - A)) / days+ A
这里A小Z就取当前时间,C#代码如下:
DateTime time = DateTime.Now;
List<DateTime> dtList = new List<DateTime>();
dtList.Add(new DateTime(2017, 9, 25, 7, 31, 50));
dtList.Add(new DateTime(2017, 9, 25, 8, 30, 20));
dtList.Add(new DateTime(2017, 9, 25, 9, 05, 45));
dtList.Add(new DateTime(2017, 9, 25, 8, 55, 50));
dtList.Add(new DateTime(2017, 9, 25, 9, 27, 50));
dtList.Add(new DateTime(2017, 9, 25, 8, 53, 50));
dtList.Add(new DateTime(2017, 9, 25, 8, 49, 50));
dtList.Add(new DateTime(2017, 9, 25, 7, 59, 50));
var balanceMillSeconds = dtList.Sum(ent=>(ent - time).TotalMilliseconds);
var count = dtList.Count;
var avgDateTime = time.AddMilliseconds(balanceMillSeconds / count);
Console.WriteLine(avgDateTime);