用C#计算“时钟”?

时间:2019-03-15 20:16:20

标签: c# linq datetime

我正在尝试构建本质上专门的时钟。最后一个难题是,一旦我提取了员工的时钟“事件”列表,以汇总事件之间的差异。这是最后一部分无法正常工作……我总是得到0的结果。这是到目前为止我已经尝试过的方法:

var worked = 
    from workDays in dc.Events
    where
        workDays.Time >= PayPeriodStartPicker.SelectedDate && 
        workDays.Time <= PayPeriodEndPicker.SelectedDate
    orderby workDays.Time
    select workDays;

TimeSpan totalTime = new TimeSpan();

for (int i = 0; i < worked.ToList().Count - 1; i++)
{
    totalTime.Add(worked.ToList()[i + 1].Time - worked.ToList()[i].Time);
}

我从来没有使用过时间跨度,所以可能有些愚蠢,但是...

1 个答案:

答案 0 :(得分:3)

我看到的主要问题是您没有保存totalTime.Add的结果。 TimeSpan对象是不可变的,因此您需要这样做:

totalTime = totalTime.Add(...);

但是,您可能也不应该这么频繁地打电话给worked.ToList()。在您的for循环之前,调用一次。

此外,您可能需要考虑夏令时对代码的影响。假设值以当地时间记录,则减去两个DateTime实例不会考虑DST。如果一个值在转换之前,而另一个值在转换之后,则您将没有正确的结果。为了解决这个问题,请改用DateTimeOffset类型记录您的值。