【问题标题】:.net core how to get week datetime list by datetime range.net核心如何按日期时间范围获取周日期时间列表
【发布时间】: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 日是星期四。

标签: c# .net .net-core


【解决方案1】:

这将产生所需的输出:

var start = new DateTime(2021, 6, 09);
var end = new DateTime(2021, 7, 01);
// If you want to get the first week complete, add this line:
//DateTime currDate = start.AddDays(1-(int)start.DayOfWeek);
// Otherwise, use this one
DateTime currDate = start;
while(currDate <= end){
    var dayOfWeek = (int)currDate.DayOfWeek;
    var endOfWeek = currDate.AddDays(7 - dayOfWeek);
    //If you want the complete last week, omit this if
    if(endOfWeek > end)
    {
        endOfWeek = end;
    }
    Console.WriteLine($"{currDate:yyyy-MM-dd} {endOfWeek:yyyy-MM-dd}");
    currDate = endOfWeek.AddDays(1);    
}

输出:

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-07 2021-06-13,整周的结束时间2021-06-28 2021-07-04,怎么弄更改代码
  • @beiduoan 我编辑了我的答案,稍微更改了代码,以便您可以选择是否需要完整的第一周和最后一周。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 2018-04-08
  • 2021-12-31
  • 2013-05-24
  • 2020-10-03
  • 2023-01-10
  • 1970-01-01
相关资源
最近更新 更多