Sar*_*niO 1 c# timespan datetimepicker
我已经搜索过这个问题,但遗憾的是找不到合适的答案.
我想计算在不同的10天做某事的平均时间,我有10个datetimepicker开始时间,10个datetimepicker用于每天的结束时间(总共20个datetimepicker).
现在我想得到这10天工作所花费的平均时间.
这就是我timespan每天计算所做的,现在我不知道如何计算平均值timespans
当然我想知道有没有更短的方法来完成工作?
DateTime Dt1 = dateTimePicker1.Value;
DateTime Dt2 = dateTimePicker2.Value;
.
.
.
DateTime Dt20 = dateTimePicker20.Value;
TimeSpan Day1 = DateTime.Parse(Dt11.TimeOfDay.ToString()).Subtract(DateTime.Parse(Dt1.TimeOfDay.ToString()));
TimeSpan Day2 = DateTime.Parse(Dt12.TimeOfDay.ToString()).Subtract(DateTime.Parse(Dt2.TimeOfDay.ToString()));
.
.
.
TimeSpan Day10 = DateTime.Parse(Dt20.TimeOfDay.ToString()).Subtract(DateTime.Parse(Dt10.TimeOfDay.ToString()));
Run Code Online (Sandbox Code Playgroud)
我想找到第1天到第10天的平均值
Net*_*age 11
鉴于IEnumerable<TimeSpan>您可以使用此扩展方法对它们进行平均:
public static TimeSpan Average(this IEnumerable<TimeSpan> spans) => TimeSpan.FromSeconds(spans.Select(s => s.TotalSeconds).Average());
Run Code Online (Sandbox Code Playgroud)
因此,将结果转换为List:
var durs = new List<TimeSpan>();
durs.Add(Dt11.TimeOfDay.Subtract(Dt1.TimeOfDay));
durs.Add(Dt12.TimeOfDay.Subtract(Dt2.TimeOfDay));
.
.
.
durs.Add(Dt20.TimeOfDay.Subtract(Dt10.TimeOfDay));
Run Code Online (Sandbox Code Playgroud)
现在计算平均值:
var avgDurs = durs.Average();
Run Code Online (Sandbox Code Playgroud)
PS:创建Aggregate@ MattJohnson的答案:
public static TimeSpan Mean(this IEnumerable<TimeSpan> source) => TimeSpan.FromTicks(source.Aggregate((m: 0L, r: 0L, n: source.Count()), (tm, s) => {
var r = tm.r + s.Ticks % tm.n;
return (tm.m + s.Ticks / tm.n + r / tm.n, r % tm.n, tm.n);
}).m);
Run Code Online (Sandbox Code Playgroud)
您可以通过基于刻度数实例化新的 TimeSpan 来找到平均值。
var time_spans = new List<TimeSpan>() { new TimeSpan(24, 10, 0), new TimeSpan(12, 0, 45), new TimeSpan(23, 30, 0), new TimeSpan(11, 34, 0) };
var average = new TimeSpan(Convert.ToInt64(time_spans.Average(t => t.Ticks)));
Console.WriteLine(average);
Run Code Online (Sandbox Code Playgroud)
结果 17:48:41.2500000
| 归档时间: |
|
| 查看次数: |
1390 次 |
| 最近记录: |