C# 将星期六日期时间提前4周,向后13周
我正在尝试创建一个自定义的DateTime对象集合,这些对象表示从当前日期时间到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周前”(
蒂亚 请尝试以下代码 从当前日期开始,它迭代从
-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();