Я ищу способ получить временной интервал из набора временных интервалов, который ближе всего к текущему времени.
Банкомат у меня есть следующий код:
var closestTime= timespanCollection.OrderBy(t => Math.Abs((t - DateTime.Now.TimeOfDay).Ticks)).First();
проблема в том, что когда время, например, 11:02, а есть время 11:00, он даст это как самое близкое, но мне нужны только времена, которые находятся в будущем.
Каким будет быстрый способ сделать это, я догадывался, как цикл foreach?
Спасибо.
timespanCollection.Where(t => t > DateTime.Now.TimeOfDay).OrderBy(...)
?
Не используйте Math.Abs, так как он преобразует отрицательное в положительное. var closestTime= timespanCollection.OrderBy(t => (t - DateTime.Now.TimeOfDay).Ticks).First();
Вы должны использовать Where
, чтобы получить только будущие временные интервалы. Вы также можете использовать TimeSpan.Duration
вместо Math.Abs
:
TimeSpan now = DateTime.Now.TimeOfDay;
TimeSpan closestTime = timespanCollection
.Where(ts => ts > now)
.OrderBy(ts => (ts - now).Duration())
.First();
Не могли бы вы предоставить образцы исходных данных?