C#两个日期之间的时间段(以周为单位)

C#两个日期之间的时间段(以周为单位),c#,C#,我有一个web应用程序,用户将在其中输入2个日期。一个开始日期和一个结束日期。现在我想写它,这样当选择StartDate和EndDate来确定有多少周,然后显示这些周的日期,例如,如果用户选择2018年11月1日作为StartDate和2018年12月31日作为EndDate,那么我想显示以下内容并记住这几周只是参考一下未来的情况: 第98周:2018年11月1日至2018年11月3日 第99周:2018年11月4日至2018年11月10日 第100周:2018年11月11日至2018年11月1

我有一个web应用程序,用户将在其中输入2个日期。一个
开始日期
和一个
结束日期
。现在我想写它,这样当选择
StartDate
EndDate
来确定有多少周,然后显示这些周的日期,例如,如果用户选择2018年11月1日作为
StartDate
和2018年12月31日作为
EndDate
,那么我想显示以下内容并记住这几周只是参考一下未来的情况:

  • 第98周:2018年11月1日至2018年11月3日
  • 第99周:2018年11月4日至2018年11月10日
  • 第100周:2018年11月11日至2018年11月17日
  • 我已经有了使用前一篇文章的周数

    现在我只想能够显示所有周中每个单独周的开始和结束日期。我尝试创建一个包含周数的
    列表
    ,然后使用
    Foreach
    检查添加的周数,但这并不完全正确。我只是在寻找实现这一目标的最有效方法

    还检查了具有类似问题的链接:

    我制作了这个片段。。。不确定是否一切都符合规范:

    var startDate=新日期时间(2018年11月1日);
    var endDate=新的日期时间(2018年12月31日);
    int diff=(7+(startDate.DayOfWeek-DayOfWeek.Monday))%7;
    变量weekStartDate=startDate.AddDays(-1*diff).Date;
    var i=1;
    var weekEndDate=DateTime.MinValue;
    而(周末日期<结束日期){
    weekEndDate=weekStartDate.AddDays(6);
    var shownStartDate=weekStartDateendDate?endDate:weekEndDate;
    WriteLine($“周{i++}:{shownstardate:dd-MMMM-yyyy}-{shownEndDate:dd-MMMM-yyyy}”);
    weekStartDate=weekStartDate.AddDays(7);
    }
    
    这假设您的周是“计数”的,从开始日期所在的周开始,并使用星期一作为一周的第一天,星期日作为最后一天(您看到的范围是星期一-星期日,第一周/最后一周除外,如果不是星期一或星期日,则使用开始/结束日期)

    您可以在此处联机运行它:

    如果您还需要知道一年中的哪一周,那么这取决于您想要的是.NET样式还是ISO8601样式。。。典型的是后者,您可以使用,例如,在上找到的方法,因此它看起来像:


    请注意,2018年12月31日(即星期一)是ISO8601标准中2019年的第一周,而.NET标准中的第53周是如何获得“第98周”的?您希望本周的日期符合.NET标准还是符合ISO8601标准?2018年11月1日->2018年11月3日是一周,而第98周又是怎样的呢?这个数字只是它当前外观的一个例子,但我使用了以下代码:Date=StartDate.ToString(“yyyy”)+“(week”+DateTimeFormatInfo.CurrentInfo.Calendar.GetWeekOfYear(StartDate,CalendarWeekRule.FirstDay,dayweek.Monday)+”)@Jcl我只是以周数为例,在我们公司,从第一个星期天到第一个星期天都是第一周。@RubenRedman我的问题更多的是关于一个事实,任何大于53的周数都会让人感到非常奇怪。这很好!非常感谢。这比我使用的循环更有效。我会注意.NET样式和ISO8601风格,只需检查他们喜欢哪一种。谢谢。这段代码会显示“1234…”忽略周数吗?@Rafalon,除非你阅读下面的注释,是的…我是故意这样做的,因为OP在他的输出上显示了“98周”,所以我想不会是年周(尽管如此,为了完成,我在底部加入了年周数,并且有两种变体)@Jcl-Right,很抱歉我没有看到这张便条。很好的解释:)