如何查明周日是否介于两个日期之间。如果周日存在,则从两天之间的差异减去一天
答案 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;