多年来按周对日期进行分组

vko*_*kou 5 c# datetime date list

我有一个值列表DateTime,我想将整个列表分成每周的子列表。

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

有没有办法遍历列表,然后将每周的DateTime值存储在新的二维列表中?

可用值从周一到周五,第一周和上周的值可能较少。

我发现的唯一相关问题是如何按周对日期进行分组,但它不适合我的情况。

Tim*_*ter 5

您可以使用此方法来获取给定的周数DateTime。然后您可以使用Enumerable.GroupBy包含年份和周数的匿名类型:

var yearWeekGroups = allDates.GroupBy(d => new { d.Year, WeekNum = GetIso8601WeekOfYear(d) });
Run Code Online (Sandbox Code Playgroud)

如果您想要List<List<DateTime>>每个子列表包含一周的日期:

List<List<DateTime>> allWeeks = yearWeekGroups.Select(g => g.ToList()).ToList();
Run Code Online (Sandbox Code Playgroud)

如果您所在的国家/地区不使用 ISO 8601,您可以使用Calendar.GetWeekOfYear

var cc = CultureInfo.CurrentCulture;
var yearWeekGroups = allDates.GroupBy(d => new 
{ 
    d.Year, 
    WeekNum = currentCulture.Calendar.GetWeekOfYear(d, cc.DateTimeFormat.CalendarWeekRule, cc.DateTimeFormat.FirstDayOfWeek) 
});
Run Code Online (Sandbox Code Playgroud)