.NET Core如何根据指定DateTime时间范围获取周日期区间列表
代码修改方案
核心修改逻辑
- 移除强制将结束时间设置为当月最后一天的代码,保留你输入的原始起止时间边界
- 不再按月拆分日期生成周,直接生成起止时间范围内的所有日期做周分组,避免跨月周被拆分
- 分组时额外绑定年份维度,避免跨年时相同周数的日期被错误合并
- 对每个周的首尾日期做边界截断,确保首周起始不早于你设置的开始时间,末周结束不晚于你设置的结束时间
完整修改后代码
using System.Globalization; var start = new DateTime(2021, 6, 09); var end = new DateTime(2021, 7, 01); Calendar calendar = CultureInfo.CurrentCulture.Calendar; // 生成start到end范围内的所有日期 var allDays = Enumerable.Range(0, end.Subtract(start).Days + 1) .Select(offset => start.AddDays(offset)); // 按年份+周数分组,避免跨年周合并错误 var weeks = allDays .GroupBy(d => new { Year = d.Year, WeekNum = calendar.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday) }) .Select(g => new { WeekStart = DateTime.Max(g.First(), start), WeekEnd = DateTime.Min(g.Last(), end) }) .ToList(); // 输出结果 foreach (var week in weeks) { Console.WriteLine($"{week.WeekStart:yyyy-MM-dd} {week.WeekEnd:yyyy-MM-dd}"); }
输出验证
运行上述代码后输出结果完全符合你的预期:
2021-06-09 2021-06-13 2021-06-14 2021-06-20 2021-06-21 2021-06-27 2021-06-28 2021-07-01
内容的提问来源于stack exchange,提问作者beiduoan
相关产品推荐
相关产品推荐

