c# - 如何从 List<DateTime> 中获取最接近的 DateTime

标签 c# linq list datetime

假设我有最新的 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/

相关文章:

python-3.x - 如何仅更改二维列表的对角线元素?

c# - Windows 窗体 - 列表对话框字符串生成器追加新行

c# - GCE 允许特定端口上的传入流量

c# - 查找两个树结构 C# 之间的差异

c# - LINQ 根据列表查询字典

python - 导入 txt 文件并将每一行作为列表

c# - 在 Windows 应用程序中以编程方式检索资源值

c# - 从 Windows 窗体应用程序打开 AutoCAD

c# - 读取奇怪的 XML 文件

python - 对嵌套列表中的每个子列表进行排序