【问题标题】:Looping through the days of the week inside of C# TimeSpan Class在 C# TimeSpan 类中循环遍历星期几
【发布时间】:2011-02-10 15:34:03
【问题描述】:

我正在尝试在 2 个时间段之间循环遍历一周中的每一天

  DateTime start = new DateTime(2010, 1, 1);
  DateTime end = new DateTime(2011, 12, 12);

我已经设法使用以下代码获取这些日期之间的天数

     TimeSpan range = (end - start);

原来是 710。

我现在正在寻找每个月的星期几,

对于实例

一月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 171 18 19 20。 . .

与匹配

M T W T F S S M T W T F S S M

我知道 c# 有一个来自 DateTime 类 DayOfWeek 的属性,它获取星期几 我的问题是构建一个循环来执行上述操作?

有人吗?

【问题讨论】:

标签: c# datetime loops timespan dayofweek


【解决方案1】:

这将遍历从开始日期到结束日期的所有日期,并获取每个日期的星期几。

DateTime startDate = new DateTime(2010, 1, 1);
DateTime endDate = new DateTime(2011, 12, 12);
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
    DayOfWeek dw = date.DayOfWeek;
    // ...
}

除非您真的担心优化,否则我不会尝试更复杂的东西。

【讨论】:

  • for (DateTime date = startDate; date
  • 如果真的担心优化问题,可以去stackoverflow.com/questions/22258070/…看看。很好笑
  • 似乎几乎不值得为库方法替换自定义(并且可能是错误的)函数,特别是当它甚至不改变 Big-O 复杂性时。同样,如果您在真正严格的性能限制下运行 - 您可以完全避免整个计算,只需使用简单的测试条件从 1 循环到 7。我更喜欢上面的方法,因为它很容易阅读/理解,10 次中有 9 次应该是你的目标。
【解决方案2】:

我喜欢以下内容:

static IEnumerable Days(DateTime start, DateTime end)
{
    while (start < end)
    {
        string day = start.ToString("ddd");

        start = start.AddDays(1);

        yield return day;
    }
}

使用方法:

foreach(string s in Days(new DateTime(2010, 1, 1), new DateTime(2010, 2, 1)))
{
    Console.WriteLine(s);
}

当然,您可以修改它以返回各种类型。

【讨论】:

    【解决方案3】:

    使用 LINQ:

    DateTime start = new DateTime(2010, 1, 1);
    DateTime end = new DateTime(2011, 12, 12);
    int days = (end  - start).Days;
    
    Enumerable
        .Range(0, days)
        .Select(x => start.AddDays(x))
        .ToList()
        .ForEach(d =>
        {
            DayOfWeek dayOfWeek = d.DayOfWeek;
            // do what you want
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多