我有一个相隔一个月的日期列表,因为所有日期都是“本月的第一个星期一”。在某些情况下缺少月份,所以我需要编写一个函数来确定所有日期是否是连续的
因此,例如,如果这是日期列表,则该函数将返回 true,因为所有项目都是“本月的第一个星期五”并且没有间隔。下面的示例将返回 true。
var date = new DateTime(2013, 1, 4);
var date1 = new DateTime(2013, 2, 1);
var date2 = new DateTime(2013, 3, 1);
var date3 = new DateTime(2013, 4, 5);
var dateArray = new DateTime[]{date, date1, date2, date3};
bool isConsecutive = IsThisListConsecutive(dateArray);
下面的示例将返回 false,因为即使它们也是“本月的第一个星期五”,它也缺少 2013 年 3 月的项目。
var date = new DateTime(2013, 1, 4);
var date1 = new DateTime(2013, 2, 1);
var date3 = new DateTime(2013, 4, 5);
var dateArray = new DateTime[]{date, date1, date3};
bool isConsecutive = IsThisListConsecutive(dateArray);
所以我试图找出 IsThisListConsecutive() 方法的正确逻辑:
这是我的第一次尝试:(请注意,我已经预先知道所有日期都是一周中的同一天和一个月的同一周,所以我唯一要寻找的是缺少的插槽)
private bool IsThisListConsecutive(IEnumerable<DateTime> orderedSlots)
{
DateTime firstDate = orderedSlots.First();
int count = 0;
foreach (var slot in orderedSlots)
{
if (slot.Month != firstDate.AddMonths(count).Month)
{
return false;
}
count++;
}
return true;
}
如果列表从一年跨越到另一年,则上面的代码可以工作。我想就创建此函数的更好方法以及如何重写该行以处理跨越数年的日期获得任何建议。