我正在尝试构建本质上专门的时钟。最后一个难题是,一旦我提取了员工的时钟“事件”列表,以汇总事件之间的差异。这是最后一部分无法正常工作……我总是得到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);
}
我从来没有使用过时间跨度,所以可能有些愚蠢,但是...
答案 0 :(得分:3)
我看到的主要问题是您没有保存totalTime.Add
的结果。 TimeSpan
对象是不可变的,因此您需要这样做:
totalTime = totalTime.Add(...);
但是,您可能也不应该这么频繁地打电话给worked.ToList()
。在您的for循环之前,调用一次。
此外,您可能需要考虑夏令时对代码的影响。假设值以当地时间记录,则减去两个DateTime
实例不会考虑DST。如果一个值在转换之前,而另一个值在转换之后,则您将没有正确的结果。为了解决这个问题,请改用DateTimeOffset
类型记录您的值。