【问题标题】:get the next date from a list closer to today in c# [duplicate]在c#中从更接近今天的列表中获取下一个日期[重复]
【发布时间】:2016-05-01 16:20:15
【问题描述】:

我需要从列表中选择下一个可用日期(如果存在)。 例如,如果我有一个包含三个日期的列表,即 12 December 2015 、 3 March 2016 和 25 April 2016,今天是 25 January 2016 。 我怎样才能只在今天的日期旁边恢复?计算无序列表,我必须检索当前日期旁边的记录。

谢谢

【问题讨论】:

标签: c# wpf list date


【解决方案1】:

根据 cmets,这应该适合您:

List<DateTime> dt;
dt.Sort((a, b) => a.CompareTo(b)); // If your list isnt sorted.
var greaterThanNow = dt.SkipWhile(x => x <= DateTime.Now).First();

您说它为您提供了最后一个元素(在您看来这是不正确的)。所以这里有一个完整的例子:

List<DateTime> dt = new List<DateTime>()
{
    new DateTime(2016, 01, 20),
    new DateTime(2016, 02, 10)
};
dt.Sort((a, b) => a.CompareTo(b)); // If your list isnt sorted.
var greaterThanNow = dt.SkipWhile(x => x <= DateTime.Now).First();

这将返回10.02.2016 00:00:00。

List<DateTime> dt = new List<DateTime>()
{
    new DateTime(2016, 01, 20),
    new DateTime(2016, 01, 05)
};
dt.Sort((a, b) => a.CompareTo(b)); // If your list isnt sorted.
var greaterThanNow = dt.SkipWhile(x => x <= DateTime.Now).First();

这会给你InvalidOperationException。

List<DateTime> dt = new List<DateTime>()
{
    new DateTime(2016, 01, 20),
    new DateTime(2016, 01, 05)
};
dt.Sort((a, b) => a.CompareTo(b)); // If your list isnt sorted.
var greaterThanNow = dt.SkipWhile(x => x <= DateTime.Now).FirstOrDefault();

这将返回01.01.0001 00:00:00。


我想这应该足以继续工作了。

【讨论】:

  • 我已经尝试过这个解决方案,但我得到的是 2016 年 3 月 4 日,是列表的最后一个元素
  • Sort功能比OrderBy好吗?例如var greaterThanNow = dt.OrderBy(d =&gt; d).SkipWhile(x =&gt; x &lt;= DateTime.Now).First();
  • @LordJam:不按主题看这里:stackoverflow.com/questions/1832684/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
相关资源
最近更新 更多