在C#TimeSpan类中循环一周中的几天

在C#TimeSpan类中循环一周中的几天,c#,datetime,loops,timespan,dayofweek,C#,Datetime,Loops,Timespan,Dayofweek,我试着在两个时段之间循环一周中的每一天 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

我试着在两个时段之间循环一周中的每一天

  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 M T W T F S M

我知道c#有一个DateTime类DayOfWeek的属性,它获取一周中的某一天 我的问题是构造一个循环来执行上述操作


有人吗?

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

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;
    // ...
}
DateTime startDate=newdatetime(2010,1,1);
DateTime endDate=新的日期时间(2011,12,12);
对于(DateTime date=startDate;date我喜欢以下内容:

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

        start = start.AddDays(1);

        yield return day;
    }
}
当然,您可以修改它以返回各种类型。

使用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
    });

对于(DateTime date=startDate;date)如果他真的担心优化问题,他可以看看。有趣的是,似乎不值得费心替换一个定制(可能还有bug)函数用于库方法,特别是当它甚至不改变大O复杂度时。同样,如果您在非常严格的性能约束下运行,您可以完全避免整个计算,只需使用简单的测试条件从1循环到7。我更喜欢上面的方法,因为它易于阅读/理解,而我10次中有9次应该是你的目标。快速方式:
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
    });