【发布时间】:2021-06-09 17:02:25
【问题描述】:
我希望按日期时间范围获取周日期时间列表,我尝试使用以下代码获取每月的周数。
var start = new DateTime(2021, 6, 09);
var end = new DateTime(2021, 7, 01);
end = new DateTime(end.Year, end.Month, DateTime.DaysInMonth(end.Year, end.Month));
var diff = Enumerable.Range(0, Int32.MaxValue)
.Select(e => start.AddMonths(e))
.TakeWhile(e => e <= end)
.Select(e => Convert.ToDateTime(e.ToString("yyyy-MM")));
foreach (var item in diff)
{
DateTime dateTime = item;
Calendar calendar = CultureInfo.CurrentCulture.Calendar;
IEnumerable<int> daysInMonth = Enumerable.Range(1, calendar.GetDaysInMonth(dateTime.Year, dateTime.Month));
List<Tuple<DateTime, DateTime>> weeks = daysInMonth.Select(day => new DateTime(dateTime.Year, dateTime.Month, day))
.GroupBy(d => calendar.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday))
.Select(g => new Tuple<DateTime, DateTime>(g.First(), g.Last()))
.ToList();
}
执行上面的代码得到如下结果,得到每个月的所有星期。
2021-06-01 2021-06-06
......
2021-07-26 2021-07-31
我想计算从我的开始日期 2021-06-09 到结束日期 2021-07-01 的周数,像这样。
2021-06-09 2021-06-13
2021-06-14 2021-06-20
2021-06-21 2021-06-27
2021-06-28 2021-07-01
如何更改我的代码
【问题讨论】:
-
你如何定义一周?
2021-06-09 2021-06-13不遵循任何正常定义。你的代码虽然非常复杂,但它能给你正确的结果吗? -
@Felix 2021-06-09 和 2021-07-01 是输入参数,9 号是星期三。我只需要将第 13 个星期日作为一周,星期一作为一周的开始,但是一周从我传入的开始日期开始。6 月 28 日是星期一,7 月 1 日是星期四。