C# 如何在C中获得日期范围内的所有周末#

C# 如何在C中获得日期范围内的所有周末#,c#,.net,date-range,dayofweek,weekend,C#,.net,Date Range,Dayofweek,Weekend,我只是想知道是否有一个简单的方法或框架 要使所有周末都在C#的日期范围内 也可以用LINQ吗 有线索吗 谢谢大家! 我找到了做这件事的方法 namespace应用程序 { 班级计划 { 静态void Main(字符串[]参数) { DateTime startDate=新日期时间(2011,3,1); DateTime endDate=DateTime.Now; TimeSpan diff=结束日期-开始日期; 整数天=差异天; 对于(var i=0;i而言,编写代码并不困难……这里有一个高效

我只是想知道是否有一个简单的方法或框架 要使所有周末都在C#的日期范围内

也可以用LINQ吗

有线索吗

谢谢大家!

我找到了做这件事的方法

namespace应用程序
{
班级计划
{
静态void Main(字符串[]参数)
{
DateTime startDate=新日期时间(2011,3,1);
DateTime endDate=DateTime.Now;
TimeSpan diff=结束日期-开始日期;
整数天=差异天;

对于(var i=0;i而言,编写代码并不困难……这里有一个高效的迭代器:

public static IEnumerable<DateTime> GetWeekends(DateTime startDate, DateTime endDate)
{
    startDate = startDate.Date;
    endDate = endDate.Date;

    if (endDate < startDate)
        yield break;

    var currentDate = startDate;

    // Advance to next Saturday
    switch (currentDate.DayOfWeek)
    {
        case DayOfWeek.Saturday:
            break;

        case DayOfWeek.Sunday:
            yield return currentDate;
            currentDate = currentDate.AddDays(6);
            break;

        default:
            currentDate = currentDate.AddDays(DayOfWeek.Saturday - currentDate.DayOfWeek);
            break;
    }

    while (currentDate <= endDate)
    {
        yield return currentDate;

        currentDate = currentDate.AddDays(1);
        if (currentDate <= endDate)
            yield return currentDate;

        currentDate = currentDate.AddDays(6);
    }
}
公共静态IEnumerable GetWeekends(日期时间开始日期、日期时间结束日期)
{
startDate=startDate.日期;
endDate=endDate.Date;
如果(结束日期<开始日期)
屈服断裂;
var currentDate=起始日期;
//提前到下周六
开关(currentDate.DayOfWeek)
{
星期六,星期六:
打破
星期日,星期日:
收益率返回当前日期;
currentDate=currentDate.AddDays(6);
打破
违约:
currentDate=currentDate.AddDays(星期六-currentDate.DayOfWeek);
打破
}

而(currentDate如果您想办法枚举所有日期,可以使用linq筛选到周末:

IEnumerable<DateTime> GetDaysBetween(DateTime start, DateTime end)
{
    for (DateTime i = start; i < end; i = i.AddDays(1))
    {
        yield return i;
    }
}

var weekends = GetDaysBetween(DateTime.Today, DateTime.Today.AddDays(365))
    .Where(d => d.DayOfWeek == DayOfWeek.Saturday || d.DayOfWeek == DayOfWeek.Sunday);
IEnumerable GetDaysBetween(日期时间开始,日期时间结束)
{
for(DateTime i=start;id.DayOfWeek==DayOfWeek.Saturday | | d.DayOfWeek==DayOfWeek.Sunday);

我想这不太简单,但应该是可能的(包括LINQ)。祝你好运!超人,现在你应该知道“可能”的答案几乎总是“是”。我想你希望有人向你展示如何解决问题。如果这是你想要的,你应该问这个问题。想知道为什么这个问题被否决了,在我看来很好,尽管它比其他一些解决方案更耗电(避免为了过滤而列举所有的时间)这是一个非常简单的/干净的/可维护的问题,除非OP在长达数年的时间里都在工作,否则这个问题不可能成为瓶颈。向上投票以补偿。向自己开枪:被否决(不是我)因为当答案被第一次发布时,它的格式很不完善,没有修改,因为MITCH把它固定得足够快,所以不认为它是一个修订版,但对于其他人来说,它不是很快就可以看到它,也不会被认为是很快的。甚至在我还在写它的时候点击标签空间。@ RonanThibaudau,这实际上是一些。我之前测试过的东西。尽管你可能会想象性能明显下降,但我发现天真版本实际上比“智能”版本表现更好大多数测试中的版本。这些测试的重点是日期模数,所以我不能说它们在使用
DayOfWeek
枚举时是否同样适用。但是,我确实同意“程序应该为人们阅读而编写,只是顺便提一下,为机器执行而编写。”@Mitch i实际上是站在这一边的,性能的下降是很小的(每周增加5个adddays的调用,而智能版本则没有),因此可以加快速度,但我们讨论的是非常微小的数量,除了在tighy循环中,这无关紧要(我刚刚编写了一个针对周末的快速特定版本,并与你的版本进行了测试,1000年内测试了100次,你的版本是2700毫秒,而我的版本是600毫秒,结果相同,但这仍然无关紧要,因为大多数人不会试图在接下来的1000年内连续100次获得所有周末)
IEnumerable<DateTime> GetDaysBetween(DateTime start, DateTime end)
{
    for (DateTime i = start; i < end; i = i.AddDays(1))
    {
        yield return i;
    }
}

var weekends = GetDaysBetween(DateTime.Today, DateTime.Today.AddDays(365))
    .Where(d => d.DayOfWeek == DayOfWeek.Saturday || d.DayOfWeek == DayOfWeek.Sunday);