C#DateTime TimeSpan持续时间?

时间:2011-02-24 16:28:10

标签: c# datetime

我有进出时间的日志。我希望日志中的列是一次登录期间的总时间,旁边是整个日志中该人员的总登录时间。

我一直在使用TimeSpan对象获得第一个持续时间,但是当我在结果集中流失时,我不断累计总时间:

// Set duration of this visit
timeInRoom = -(ieLog.Ingresstime - ieLog.Egresstime);

我已经尝试使用另一个TimeSpan变量来保存最后一次迭代的值并将timeInRoom添加到那里以便我可以有一个正在运行的计数器,但这似乎不起作用。

我猜这是错误的做法。有任何想法吗?时间是结果集中的DateTime值。

感谢。

2 个答案:

答案 0 :(得分:4)

这样的事情应该有效:

var timeInRoom = new TimeSpan();
foreach(var log in logs)
{
    timeInRoom += log.Egresstime - log.IngressTime;
}

或者如果你是LINQ的粉丝:

logs.Aggregate(new TimeSpan(), 
               (ts, log) => ts + (log.Egresstime - log.IngressTime));

答案 1 :(得分:4)

尝试将DateTime和TimeSpan概念分开。 TimeSpans表示固定的时间量,无论其何时发生或发生。这只是一个单位的数字。 DateTime表示空间中的固定时间,具有相对于现在的确定值。

例如:

DateTime now = DateTime.Now;
DateTime tomorrow = now.AddDays(1);
DateTime yesterday = now.AddDays(-1);
DateTime nextWeek = now.Add(TimeSpan.FromDays(7));
DateTime dayAfterNext = now.Add(TimeSpan.FromDays(1) + TimeSpan.FromDays(1));

TimeSpan twoDays = TimeSpan.FromDays(1) + TimeSpan.FromDays(1);
TimeSpan oneMinute = TimeSpan.FromMinutes(2) - TimeSpan.FromMinutes(1);
DateTime oneMinuteFromNow = now.Add(oneMinute);

@ StriplingWarrior的回答正确地演示了如何保持运行的总时间。