如何选择每月的最新日期时间?

时间:2016-07-07 07:09:43

标签: c# list sorting datetime

我必须实现一个算法,它接收DateTime列表并恢复每个月的最新DateTime,我不知道该怎么做。 例如:

29/06/2016 -> Lastest date of june
27/06/2016
05/05/2016 -> Lastest date of may
15/04/2016 -> Lastest date of april
13/04/2016
...

预期结果

29/06/2016
05/05/2016
15/04/2016

3 个答案:

答案 0 :(得分:4)

您所知道的是日期列表中每月的最长日期。您可以使用GroupByMax来获取LINQ,例如:

 var maxDatesPerMonth=from date in dates
                      group date by new {date.Year,date.Month} into months
                      select months.Max();

var maxDatesPerMonth=dates.GroupBy(date=>new {date.Year,date.Month})
                          .Select(months=>months.Max());

答案 1 :(得分:0)

试试这个......

 class Program
{
    static void Main(string[] args)
    {
        var dateTimes = new[]
        {

            new DateTime(2016, 06, 29 ),
            new DateTime(2016, 06, 27 ),
            new DateTime(2016, 05, 05 ),
            new DateTime(2016, 04, 15 ),
            new DateTime(2016, 04, 13 )
        };

        var years = dateTimes.GroupBy(x => x.Year).OrderByDescending(x => x.Key);

        foreach (IGrouping<int, DateTime> grouping in years)
        {
            var months = grouping.GroupBy(x => x.Month);

            foreach (IGrouping<int, DateTime> month in months)
            {
                Console.WriteLine(month.First());
            }
        }

        Console.ReadLine();
    }
}

这输出以下内容......

29/06/2016 00:00:00
05/05/2016 00:00:00
15/04/2016 00:00:00

答案 2 :(得分:0)

您可以使用LINQ解决此问题。

伪代码:

dateList.Where(x => x.Month == 6).Max()

这将为您提供6月的最新日期。

确保使用DateTime类型的正确属性而不是*.Month。您可能还需要指定.Max(),可能需要.Select(x => x.Day).Max()

尽管如此:LINQ是要走的路。 希望它有所帮助。