在多年中按周分组

时间:2017-10-26 11:47:15

标签: c# list date datetime

我有一个var index = function( callback ) { var podcast = 0; User.findOne({ sessionID: this.event.session.sessionId }, function(err, user) { if (err ||!user){ } else { console.log(user); podcast = user.podcast; } }); callback( podcast ); }; index(); var callback = function(data) { return data; } var iUseMyAnywhere = callback; 值列表,我想将整个列表拆分为每周的子列表。

日期可能跨越多年(用户选择开始日期和结束日期),因此每个日历周编号将其拆分的解决方案最终会出现冲突。

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

可用值是周一到周五,第一周和上周的值可能更少。

我找到的唯一相关问题是How to group dates by weeks,但它不适合我的情况。

1 个答案:

答案 0 :(得分:3)

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

var yearWeekGroups = allDates.GroupBy(d => new { d.Year, WeekNum = GetIso8601WeekOfYear(d) });

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

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

如果您所在的国家/地区不使用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) 
});