C#中按每日特定时段(00:10至次日00:00)分组集合数据
解决方案
你的需求是把当天00:10:00到次日00:00:00的记录归为一组,而非自然的00:00-24:00区间,所以需要调整分组的判断逻辑:
- 若时间戳的时间部分早于
00:10:00,这条记录属于前一天的分组 - 若时间戳的时间部分大于等于
00:10:00,这条记录属于当前日期的分组
直接在GroupBy里生成对应分组键即可实现:
var batchGroupedByCustomPeriod = batch.GroupBy(value => { var timestamp = value.Timestamp; // 判断时间是否早于当天00:10 if (timestamp.TimeOfDay < TimeSpan.FromMinutes(10)) { // 属于前一天分组,日期减一天 return timestamp.AddDays(-1).Date; } else { // 属于当天分组,取日期部分 return timestamp.Date; } });
分组后,每个组的键对应基准日期(比如2023.05.01),涵盖的记录范围就是2023.05.01 00:10:00到2023.05.02 00:00:00,完全匹配你的需求。
如果需要沿用原代码的匿名类型存储年月日,可将返回值替换为:
var groupDate = timestamp.TimeOfDay < TimeSpan.FromMinutes(10) ? timestamp.AddDays(-1).Date : timestamp.Date; return new { year = groupDate.Year, month = groupDate.Month, day = groupDate.Day };
内容的提问来源于stack exchange,提问作者Wojciech Szabowicz
相关产品推荐
相关产品推荐

