找出List中的DateTimes之间的差异

时间:2014-05-28 07:52:16

标签: c# datetime

我有一个日期时间列表

var times = CurrentMeter.SessionTimes.ToList();

如何找到它们之间的差异并将结果添加到新列表?

我想要每个日期时间之间的小时,分​​钟,秒和毫秒。

3 个答案:

答案 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现在是:

enter image description here

(请注意,这是一种非常简单的方法,仅适用于差异<24h。如果您有更大的差异,请考虑d.Days等。)