【发布时间】:2012-02-15 05:54:55
【问题描述】:
大家好,我目前正在做一个项目,当某个事件发生时,有关事件的详细信息(包括事件发生的时间)被添加到列表数组中。
一旦方法完成,我会将列表传递给另一个检查其值的方法。在我通过循环之前,我检查了我的 PC 的当前时间,我需要检查保存在列表数组中的时间与当前时间之间的差异是否大于 5 秒。
我将如何去做。
【问题讨论】:
标签: c#
大家好,我目前正在做一个项目,当某个事件发生时,有关事件的详细信息(包括事件发生的时间)被添加到列表数组中。
一旦方法完成,我会将列表传递给另一个检查其值的方法。在我通过循环之前,我检查了我的 PC 的当前时间,我需要检查保存在列表数组中的时间与当前时间之间的差异是否大于 5 秒。
我将如何去做。
【问题讨论】:
标签: c#
假设dateTime1 和dateTime2 是DateTime 值:
var diffInSeconds = (dateTime1 - dateTime2).TotalSeconds;
在您的情况下,您将使用DateTime.Now 作为值之一,并将列表中的时间作为另一个值。注意顺序,如果dateTime1 早于dateTime2,结果可能为负。
【讨论】:
DateTime 有一个 Subtract method 和一个 overloaded - operator 用于这种场合:
DateTime now = DateTime.UtcNow;
TimeSpan difference = now.Subtract(otherTime); // could also write `now - otherTime`
if (difference.TotalSeconds > 5) { ... }
【讨论】:
此版本始终将秒数差作为正数返回(结果与@freedeveloper 的解决方案相同):
var seconds = System.Math.Abs((date1 - date2).TotalSeconds);
【讨论】:
我用这个来避免负间隔。
var seconds = (date1< date2)? (date2- date1).TotalSeconds: (date1 - date2).TotalSeconds;
【讨论】:
Math.Abs,这段代码的可读性和性能不如仅使用上面的答案。