首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >周六DateTime提前4周,13周前

周六DateTime提前4周,13周前
EN

Stack Overflow用户
提问于 2015-02-19 16:24:42
回答 4查看 144关注 0票数 0

我正在尝试制作一个DateTime对象的自定义集合,这些对象表示从当前日期到提前4周和13周前的所有星期六。我试图按最近在集合顶部的当前日期时间排序这个集合。

蒂娅!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-02-19 16:30:32

试试下面的代码。

它迭代从-13+4从当前日期所需的周,并将特定的一天调整为所需的一天(在本例中为Saturday)。

代码语言:javascript
运行
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2015-02-19 16:44:40

基于注释的更新

注意:代码可能需要调整,这取决于您如何定义“13周前”(以及“从现在起的4周”)--您是在考虑日历周,还是真正的13*7天?下面的代码可以追溯到13天*7天。

有一种方法可以做到:

  1. 创建一个今天的开始日期,减去13周
  2. 将开始日期调整到下一个星期六(如果不是星期六)
  3. 创建一个今天的结束日期加上4个星期。
  4. 从开始到结束每7天,把这一天添加到列表中。
  5. 按日期顺序列表,然后降序

下面是一个示例实现:

代码语言:javascript
运行
复制
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()));
票数 1
EN

Stack Overflow用户

发布于 2015-02-19 16:53:50

这个怎么样:

代码语言:javascript
运行
复制
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替换为:

代码语言:javascript
运行
复制
.OrderByDescending(d => d);

这是一个小提琴

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28611511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档