我有一个日期时间列表
var times = CurrentMeter.SessionTimes.ToList();
如何找到它们之间的差异并将结果添加到新列表?
我想要每个日期时间之间的小时,分钟,秒和毫秒。
答案 0 :(得分:1)
两个DateTime
对象之间的差异是TimeSpan
。
此函数将计算每对DateTime
s。
它将在times
中每次迭代,从中减去前一个值,并将差值添加到结果列表中。
IEnumerable<TimeSpan> CalculateDeltas(IEnumerable<DateTime> times) {
var time_deltas = new List<TimeSpan>();
DateTime prev = times.First();
foreach (var t in times.Skip(1)) {
time_deltas.Add(t - prev);
prev = t;
}
return time_deltas;
}
答案 1 :(得分:0)
以下是计算列表中每个项目之间差异的示例。结果存储在List<double>
中,表示每个日期时间之间的总秒数。
var times = new List<DateTime>
{
new DateTime(2014, 5, 28, 9, 57, 12),
new DateTime(2014, 5, 28, 9, 57, 43),
new DateTime(2014, 5, 28, 9, 58, 03),
new DateTime(2014, 5, 28, 9, 59, 46),
new DateTime(2014, 5, 28, 10, 0, 22),
};
var differences = new List<double>();
for(int i = 0; i < times.Count - 1; i++)
{
differences.Add((times[i+1] - times[i]).TotalSeconds);
}
输出:
31
20
103
36
答案 2 :(得分:0)
怎么样:
var time = new []{
DateTime.Parse("14-4-2012 00:00:00"),
DateTime.Parse("14-4-2012 01:12:34"),
DateTime.Parse("14-4-2012 12:44:33"),
DateTime.Parse("14-4-2012 23:12:42"),
};
var result = time.Zip(time.Skip(1), (a, b) => b - a)
.Select(d => new {d.Hours, d.Minutes, d.Seconds})
.ToList();
result
现在是:
(请注意,这是一种非常简单的方法,仅适用于差异<24h。如果您有更大的差异,请考虑d.Days
等。)