在C#中,给定任意一组DayOfWeek端点(例如DayOfWeek.Friday和DayOfWeek.Sunday),如何测试任意日期是否介于这两天之间(包括两端)?

例子:

// result == true; Oct 23, 2010 is a Saturday
var result = InBetweenDaysInclusive(new DateTime(2010, 10, 23),
                                    DayOfWeek.Friday,
                                    DayOfWeek.Sunday);

// result == true; Oct 22, 2010 is a Friday
result = InBetweenDaysInclusive(new DateTime(2010, 10, 22),
                                DayOfWeek.Friday,
                                DayOfWeek.Sunday);

// result == true; Oct 24, 2010 is a Sunday
result = InBetweenDaysInclusive(new DateTime(2010, 10, 24),
                                DayOfWeek.Friday,
                                DayOfWeek.Sunday);

// result == false; Oct 25, 2010 is a Monday
result = InBetweenDaysInclusive(new DateTime(2010, 10, 25),
                                DayOfWeek.Friday,
                                DayOfWeek.Sunday);

谢谢!

最佳答案

此功能将需要两个单独的分支,具体取决于开始日期和结束日期之间的差是负还是正/零。

我可能完全不在基地,但是我认为这适用于所有情况:

// No state in method, so made it static
public static bool InBetweenDaysInclusive(DateTime date, DayOfWeek start, DayOfWeek end)
{
    DayOfWeek curDay = date.DayOfWeek;

    if (start <= end)
    {
        // Test one range: start to end
        return (start <= curDay && curDay <= end);
    }
    else
    {
        // Test two ranges: start to 6, 0 to end
        return (start <= curDay || curDay <= end);
    }
}

作为引用,当我运行测试数据并为每个结果添加Console.WriteLine时,它们返回了以下内容:
True
True
True
False

编辑:我的最后一个解释太含糊。这是固定的。

诀窍是,如果使用end < start,则您有两个有效范围:start到上限和end的上限。这将导致(start <= curDay && curDay <= upperBound) || curDay <= end && lowerBound <= curDay)
但是,由于它们是边界,所以curDay始终为,始终为 <= upperBound>= lowerBound,因此我们省略了该代码。

10-07 14:29