从集合中获取最接近TimeOfDay的时间跨度

时间:2018-05-02 08:05:59

标签: c#

我正在寻找一种从时间跨度集合中获取时间跨度的方法,该时间跨度与当前时间最接近。

我有以下代码:

var closestTime= timespanCollection.OrderBy(t => Math.Abs((t - DateTime.Now.TimeOfDay).Ticks)).First();
问题是当时间是例如11:02并且时间是11:00时,它会将此作为最接近但我只想要将来的时间。

这样做的快速方法是什么,我像foreach循环一样猜对了?

感谢。

1 个答案:

答案 0 :(得分:1)

您应该使用Where来获取未来的时间跨度。您也可以使用TimeSpan.Duration代替Math.Abs

TimeSpan now = DateTime.Now.TimeOfDay;
TimeSpan closestTime = timespanCollection
    .Where(ts => ts > now)
    .OrderBy(ts => (ts - now).Duration())
    .First();