C# 在多个年份中按周分组日期

C# 在多个年份中按周分组日期,c#,list,date,datetime,C#,List,Date,Datetime,我有一个DateTime值的列表,我希望每周将整个列表拆分为子列表 这些日期可能跨越多个年份(用户选择开始和结束日期),因此将它们按日历周数拆分的解决方案最终会导致冲突 是否有方法遍历列表,然后将每周的DateTime值存储在新的2d列表中 可用值为周一到周五,第一周和最后一周的值可能较少 我发现的唯一相关问题是,但它不适合我的情况。您可以使用来获取给定日期时间的周数。然后,您可以将Enumerable.GroupBy与包含年份和周数的匿名类型一起使用: var yearWeekGroups =

我有一个
DateTime
值的列表,我希望每周将整个列表拆分为子列表

这些日期可能跨越多个年份(用户选择开始和结束日期),因此将它们按日历周数拆分的解决方案最终会导致冲突

是否有方法遍历列表,然后将每周的
DateTime
值存储在新的2d列表中

可用值为周一到周五,第一周和最后一周的值可能较少

我发现的唯一相关问题是,但它不适合我的情况。

您可以使用来获取给定日期时间的周数。然后,您可以将
Enumerable.GroupBy
与包含年份和周数的匿名类型一起使用:

var yearWeekGroups = allDates.GroupBy(d => new { d.Year, WeekNum = GetIso8601WeekOfYear(d) });
如果您想要一个
列表,其中每个子列表包含一周的日期:

List<List<DateTime>> allWeeks = yearWeekGroups.Select(g => g.ToList()).ToList();

类似于这样的情况,除了按年份和周数分组:?如果您将年份乘以100,然后添加周,则会给出一个唯一的分组。如果这一周的时间跨度超过两年,那么你就必须处理这个案子。所以你会在第一周进行测试,如果它是在周日开始的,那么就包括在今年,否则,从今年减去一,再加上53。这也会起作用,尽管它隐藏了一些含义
var cc = CultureInfo.CurrentCulture;
var yearWeekGroups = allDates.GroupBy(d => new 
{ 
    d.Year, 
    WeekNum = currentCulture.Calendar.GetWeekOfYear(d, cc.DateTimeFormat.CalendarWeekRule, cc.DateTimeFormat.FirstDayOfWeek) 
});