我要计算一组时间跨度的平均值,其中每个时间跨度是两个日期之间的减法。
DateTime a = GetStartDateTime();
DateTime b = GetEndDateTime();
var delta = b.Subtract(a).TotalDays;
日期格式类似于22.08.2016 21:00:00
有没有办法更合理地做到这一点?
另外,我很好奇为什么我的delta
总是像0.26914351851851853
,换句话说为什么它不是整数?
更新: 以下是示例时间跨度:
23.08.2016 10:31:38 - 22.08.2016 21:00:00
24.08.2016 14:32:26 - 24.08.2016 21:00:00
17.08.2016 8:36:51 - 01.01.2016 21:00:00
17.08.2016 8:34:27 - 15.03.2016 21:00:00
答案 0 :(得分:1)
对所有TimeSpans的Ticks值执行简单的平均计算,并从结果中创建新的TimeSpan。这将代表平均或平均TimeSpan。 e.g。
var timeSpanList = new List<TimeSpan>();
var provider = CultureInfo.InvariantCulture;
timeSpanList.Add(
new TimeSpan(
DateTime.ParseExact("23.08.2016 10:31:38", "dd.MM.yyyy H:mm:ss", provider).Ticks -
DateTime.ParseExact("22.08.2016 21:00:00", "dd.MM.yyyy H:mm:ss", provider).Ticks));
timeSpanList.Add(
new TimeSpan(
DateTime.ParseExact("24.08.2016 14:32:26", "dd.MM.yyyy H:mm:ss", provider).Ticks -
DateTime.ParseExact("24.08.2016 21:00:00", "dd.MM.yyyy H:mm:ss", provider).Ticks));
timeSpanList.Add(
new TimeSpan(
DateTime.ParseExact("17.08.2016 8:36:51", "dd.MM.yyyy H:mm:ss", provider).Ticks -
DateTime.ParseExact("01.01.2016 21:00:00", "dd.MM.yyyy H:mm:ss", provider).Ticks));
timeSpanList.Add(
new TimeSpan(
DateTime.ParseExact("17.08.2016 8:34:27", "dd.MM.yyyy H:mm:ss", provider).Ticks -
DateTime.ParseExact("15.03.2016 21:00:00", "dd.MM.yyyy H:mm:ss", provider).Ticks));
var totalTicks = 0L;
foreach(var ts in timeSpanList)
{
totalTicks += ts.Ticks;
}
var avgTicks = totalTicks / timeSpanList.Count;
var avgTimeSpan = new TimeSpan(avgTicks);