C# 将星期六日期时间提前4周,向后13周

C# 将星期六日期时间提前4周,向后13周,c#,datetime,C#,Datetime,我正在尝试创建一个自定义的DateTime对象集合,这些对象表示从当前日期时间到4周前和13周后的所有星期六。我正试图通过最新的日期时间来订购此系列 蒂亚 请尝试以下代码 从当前日期开始,它迭代从-13到+4周的所需周数,并将特定日期调整为所需的日期(在本例中为周六) for(inti=-13;i请尝试以下代码 从当前日期开始,它迭代从-13到+4周的所需周数,并将特定日期调整为所需的日期(在本例中为周六) for(inti=-13;i根据评论更新 注意:代码可能需要根据您如何定义“13周前”(

我正在尝试创建一个自定义的DateTime对象集合,这些对象表示从当前日期时间到4周前和13周后的所有星期六。我正试图通过最新的日期时间来订购此系列


蒂亚

请尝试以下代码

从当前日期开始,它迭代从
-13
+4
周的所需周数,并将特定日期调整为所需的日期(在本例中为
周六


for(inti=-13;i请尝试以下代码

从当前日期开始,它迭代从
-13
+4
周的所需周数,并将特定日期调整为所需的日期(在本例中为
周六


for(inti=-13;i根据评论更新

注意:代码可能需要根据您如何定义“13周前”(以及“4周后”)进行调整-您是否考虑日历周,或者确切地说是13*7天?下面的代码回顾了13*7天

这里有一种方法:

  • 创建一个今天减去13周的开始日期
  • 将开始日期调整到下一个星期六(如果不是星期六)
  • 创建今天加上4周的结束日期
  • 从开始到结束的每7天,将该天添加到列表中
  • 按日期按降序排列列表
  • 下面是一个示例实现:

    var saturdays = new List<DateTime>();
    var daysInWeek = 7;
    
    var startDate = DateTime.Today.Subtract(TimeSpan.FromDays(13 * daysInWeek));
    
    // Adjust start date so it is the first Saturday after 13 weeks before today
    startDate = startDate.AddDays(DayOfWeek.Saturday - startDate.DayOfWeek);
    
    var endDate = DateTime.Today.Add(TimeSpan.FromDays(4 * daysInWeek));
    
    for (var curDate = startDate; curDate <= endDate; curDate = curDate.AddDays(daysInWeek))
    {
        saturdays.Add(curDate);
    }
    
    // Order by date, descending
    saturdays = saturdays.OrderByDescending(d => d).ToList();
    
    // Output list of Saturdays to console for verification
    saturdays.ForEach(s => Console.WriteLine(s.ToShortDateString()));
    
    var saturdays=新列表();
    var daysInWeek=7;
    var startDate=DateTime.Today.Subtract(TimeSpan.FromDays(13*daysInWeek));
    //调整开始日期,使之成为今天前13周后的第一个星期六
    startDate=startDate.AddDays(星期六-startDate.DayOfWeek);
    var endDate=DateTime.Today.Add(TimeSpan.FromDays(4*daysInWeek));
    for(var curDate=startDate;curDate d).ToList();
    //将星期六列表输出到控制台进行验证
    saturdays.ForEach(s=>Console.WriteLine(s.ToShortDateString());
    
    根据评论更新

    注意:代码可能需要根据您如何定义“13周前”(以及“4周后”)进行调整-您是否考虑日历周,或者确切地说是13*7天?下面的代码回顾了13*7天

    这里有一种方法:

  • 创建一个今天减去13周的开始日期
  • 将开始日期调整到下一个星期六(如果不是星期六)
  • 创建今天加上4周的结束日期
  • 从开始到结束的每7天,将该天添加到列表中
  • 按日期按降序排列列表
  • 下面是一个示例实现:

    var saturdays = new List<DateTime>();
    var daysInWeek = 7;
    
    var startDate = DateTime.Today.Subtract(TimeSpan.FromDays(13 * daysInWeek));
    
    // Adjust start date so it is the first Saturday after 13 weeks before today
    startDate = startDate.AddDays(DayOfWeek.Saturday - startDate.DayOfWeek);
    
    var endDate = DateTime.Today.Add(TimeSpan.FromDays(4 * daysInWeek));
    
    for (var curDate = startDate; curDate <= endDate; curDate = curDate.AddDays(daysInWeek))
    {
        saturdays.Add(curDate);
    }
    
    // Order by date, descending
    saturdays = saturdays.OrderByDescending(d => d).ToList();
    
    // Output list of Saturdays to console for verification
    saturdays.ForEach(s => Console.WriteLine(s.ToShortDateString()));
    
    var saturdays=新列表();
    var daysInWeek=7;
    var startDate=DateTime.Today.Subtract(TimeSpan.FromDays(13*daysInWeek));
    //调整开始日期,使之成为今天前13周后的第一个星期六
    startDate=startDate.AddDays(星期六-startDate.DayOfWeek);
    var endDate=DateTime.Today.Add(TimeSpan.FromDays(4*daysInWeek));
    for(var curDate=startDate;curDate d).ToList();
    //将星期六列表输出到控制台进行验证
    saturdays.ForEach(s=>Console.WriteLine(s.ToShortDateString());
    
    这个怎么样:

    public static void Main()
    {
        var start = DateTime.Now;
        var saturdays = GetSaturdays(start, 13, 4).OrderBy(d => Math.Abs((start - d).Days));
        foreach (var s in saturdays) 
        {
            Console.WriteLine(s.ToLongDateString());
        }
    }
    
    public static IEnumerable<DateTime> GetSaturdays(DateTime start, int weeksBack, int weeksForward)
    {
        var startingSat = start.AddDays(6 - (int)start.DayOfWeek);
        for (int i = -weeksBack; i < weeksForward; i++)
        {
            yield return startingSat.AddDays(i * 7);
        }
    }
    
    这里有一个

    这个怎么样:

    public static void Main()
    {
        var start = DateTime.Now;
        var saturdays = GetSaturdays(start, 13, 4).OrderBy(d => Math.Abs((start - d).Days));
        foreach (var s in saturdays) 
        {
            Console.WriteLine(s.ToLongDateString());
        }
    }
    
    public static IEnumerable<DateTime> GetSaturdays(DateTime start, int weeksBack, int weeksForward)
    {
        var startingSat = start.AddDays(6 - (int)start.DayOfWeek);
        for (int i = -weeksBack; i < weeksForward; i++)
        {
            yield return startingSat.AddDays(i * 7);
        }
    }
    
    这里有一个

    列表saturdays=newlist();
    对于(int i=-13;i<4;i++)
    saturdays.Add(DateTime.Now.AddDays(i*7-(DateTime.Now.DayOfWeek-DayOfWeek.Saturday));
    DateTime today=DateTime.Now;
    var more_recent=saturdays.OrderBy(day=>Math.Abs(today.Subtract(day.Days)).ToList();
    
    列出星期六=新列表();
    对于(int i=-13;i<4;i++)
    saturdays.Add(DateTime.Now.AddDays(i*7-(DateTime.Now.DayOfWeek-DayOfWeek.Saturday));
    DateTime today=DateTime.Now;
    var more_recent=saturdays.OrderBy(day=>Math.Abs(today.Subtract(day.Days)).ToList();
    
    那么你的问题是什么?你哪里有困难?你看过MSDN文档中的
    DateTime
    和所有函数和属性了吗?另外,定义最近的,因为你要预测未来4周的时间。根据上述内容编辑是的,这仍然不清楚。如果你想让它们从n你只需要这么说。如果不是,那么你仍然模棱两可。什么是“在收藏的顶部”如果它最初未分类?那么你的问题是什么?你在哪里有困难?你有没有看过
    DateTime
    的MSDN文档以及其中的所有函数和属性?另外,定义最新的,因为你要预测未来4周。根据上述内容编辑是的,这仍然不清楚。如果你想让它们如果没有,那么你仍然模棱两可。什么是“在集合的顶部”如果一开始是未排序的?当然,一旦你找到了一个星期六,你至少应该开始跳过7天而不是1天?@MattBurland更新代码,使开始日期为星期六,然后每7天循环一次。当然,一旦你找到了一个星期六,你至少应该开始跳过7天而不是1天?@MattBurland更新代码,以便开始日期为星期六是周六,然后每7天循环一次。
    List<DateTime> saturdays = new List<DateTime>();
    for (int i = -13; i < 4; i++)
        saturdays.Add(DateTime.Now.AddDays(i * 7 - (DateTime.Now.DayOfWeek - DayOfWeek.Saturday)));
    DateTime today = DateTime.Now;
    var more_recent = saturdays.OrderBy(day => Math.Abs(today.Subtract(day).Days)).ToList();