检查星期日是在两个日期之间

时间:2009-12-23 06:39:00

标签: c# asp.net

如何查明周日是否介于两个日期之间。如果周日存在,则从两天之间的差异减去一天

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你正在寻找这样的东西:

public static bool DoesIncludeSunday(DateTime startDate, DateTime endDate)
{
    bool r = false;
    TimeSpan testSpan = new TimeSpan(6, 0, 0, 0);
    TimeSpan actualSpan =endDate - startDate;

    if (actualSpan >= testSpan) { r = true; }
    else
    {
        DateTime checkDate = endDate;
        while (checkDate > startDate)
        {
            r = (checkDate.DayOfWeek == DayOfWeek.Sunday);
            if(r) { break; }
            checkDate = checkDate.AddDays(-1);
        }
    }

    return r;
}

endDate需要是最近的日期。第一部分只是让我们不检查开始和结束日期是否超过6天(它将包括一个星期日,所以不需要继续)。第二位只是从endDate一次向后走一天,检查周日是否在那里。

一旦你知道星期日是否属于范围的一部分,你可以从调用代码对你想要的日期做任何改变。

答案 1 :(得分:0)

因为我喜欢聪明,所以我这样写了:

public static int DaysExcludingSundays(DateTime start, DateTime end)
{
 return ((end - start).Days + 1) - ((((end - start).Days + 1) + (((int)start.DayOfWeek + 6) % 7)) / 7);
}

您可以随意复制并粘贴此代码,而无需了解其含义。我很喜欢这个谜题。

细分:

int startOffset = ((int) start.DayOfWeek + 6) % 7;  
int totalInclusiveDays = (end - start).Days + 1;  
int numberOfSundays = (totalInclusiveDays + startOffset) / 7;  
int numberOfDaysWithoutSundays = totalInclusiveDays - numberOfSundays;