我必须实现一个算法,接收一个日期时间列表并恢复每周的最新日期时间。
例子:

29/06/2016 -> Lastest date of the last week of the month
27/06/2016
24/06/2016 -> Lastest date of the before last week of the month
22/06/2016
21/06/2016
15/06/2016 -> Lastest of the third week
13/06/2016
...

预期结果
29/06/2016
24/06/2016
15/06/2016

我不会问代码谁做了,但一些方向或指示,以解决这个问题。

最佳答案

注意:这个答案假设你对“自然”周感兴趣,而“自然”周并不真正关心年份。例如,2015年12月31日是一个星期四,2016年1月1日是一个星期五,在我看来(使用这个答案中的算法),这些都算在同一周内……毕竟,这两天的前/后星期一是一样的。
最简单的解决方法可能是按“周初”分组,然后取每组中的最新值。找到一周的开始有点尴尬,最好用助手的方法:

var latestPerWeek = dates.GroupBy(StartOfWeek)
                         .Select(g => g.Max())
                         .ToList();

...

private static DateTime StartOfWeek(DateTime date)
{
    date = date.Date; // Just remove any time parts...
    // 0=Sunday, 1=Monday... 6=Saturday
    int sundayToSaturdayDayOfWeek = (int) date.DayOfWeek;
    // 0=Monday, 1=Tuesday... 6=Sunday
    int mondayToSundayDayOfWeek = ((sundayToSaturdayDayOfWeek - 1) + 7) % 7;
    return date.AddDays(-mondayToSundayDayOfWeek);
}

注意,.net“一年中的一周”处理很容易使用,但基本上不处理这种情况。在Noda Time 2.0中,这将简单得多,但还不可用…

关于c# - 如何选择每周的最新日期时间? C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38140193/

10-12 20:55