在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
,因此我们省略了该代码。