我正在寻找一种从时间跨度集合中获取时间跨度的方法,该时间跨度与当前时间最接近。
我有以下代码:
var closestTime= timespanCollection.OrderBy(t => Math.Abs((t - DateTime.Now.TimeOfDay).Ticks)).First();
问题是当时间是例如11:02并且时间是11:00时,它会将此作为最接近但我只想要将来的时间。
这样做的快速方法是什么,我像foreach循环一样猜对了?
感谢。
答案 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();