假设我有最新的 DateTime 和所有可能日期的列表。我将如何有效地在列表中找到最接近去年日期的日期时间?
假设我的 list 包括以下内容:
2014-03-07
2014-03-14
2014-03-21
2014-03-28
...
2015-03-06
2015-03-13
2015-03-20
我最近的日期是 2015-03-20,但我想检索去年的日期,2014-03-21。
这是我目前所拥有的,但如果去年的日期是一天休假(例如,我的时间段每周存储),它将不起作用。
public DateTime LastYearDate()
{
List<DateTime> times = GetAllDates();
times.Sort();
times.Reverse();
DateTime currentDate = times.First();
return times.Where(dt => dt == currentDate.AddYears(-1)).First();
}
我不确定我会用什么来递归计算最接近的日期,所以如果你对我应该采取的方向有任何想法(引用任何 Linq 函数来检查),那将不胜感激。
最佳答案
只需按列表中的日期与您要查找的日期之间的差异排序:
var dateToFind = currentDate.AddYears(-1);
times.OrderBy(t => (t - dateToFind).Duration).FirstOrDefault();
(两个日期之间的差异是
TimeSpan
的一个实例;Duration
属性返回绝对值)
关于c# - 如何从 List<DateTime> 中获取最接近的 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817150/