我正在尝试制作一个DateTime对象的自定义集合,这些对象表示从当前日期到提前4周和13周前的所有星期六。我试图按最近在集合顶部的当前日期时间排序这个集合。
蒂娅!
发布于 2015-02-19 16:30:32
试试下面的代码。
它迭代从-13到+4从当前日期所需的周,并将特定的一天调整为所需的一天(在本例中为Saturday)。
for (int i = -13; i <= 4; i++)
{
var dateBackWithIWeeks = DateTime.Now.AddDays(i * 7);
switch (dateBackWithIWeeks.DayOfWeek)
{
case DayOfWeek.Sunday:
dateBackWithIWeeks = dateBackWithIWeeks.AddDays(-1);
break;
case DayOfWeek.Monday:
dateBackWithIWeeks = dateBackWithIWeeks.AddDays(5);
break;
case DayOfWeek.Tuesday:
dateBackWithIWeeks = dateBackWithIWeeks.AddDays(4);
break;
case DayOfWeek.Wednesday:
dateBackWithIWeeks = dateBackWithIWeeks.AddDays(3);
break;
case DayOfWeek.Thursday:
dateBackWithIWeeks = dateBackWithIWeeks.AddDays(2);
break;
case DayOfWeek.Friday:
dateBackWithIWeeks = dateBackWithIWeeks.AddDays(1);
break;
case DayOfWeek.Saturday:
break;
}
Console.WriteLine(dateBackWithIWeeks.Date);
}发布于 2015-02-19 16:44:40
基于注释的更新
注意:代码可能需要调整,这取决于您如何定义“13周前”(以及“从现在起的4周”)--您是在考虑日历周,还是真正的13*7天?下面的代码可以追溯到13天*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()));发布于 2015-02-19 16:53:50
这个怎么样:
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);
}
}你的问题仍然有点不清楚,你希望如何这些有序,但你可以改变排序,以反映它是你想要的。听起来,你想要他们的排序,因为他们离开始日期有多近,这几乎是没有道理的。如果您只希望它们按日期降序(如果这是您实际需要的话,您应该这么说),那么只需将OrderBy替换为:
.OrderByDescending(d => d);这是一个小提琴
https://stackoverflow.com/questions/28611511
复制相似问题