检查c中的日期范围是否按顺序排列,星期六和星期日除外



我想确定日期时间列表是否是连续的。

此外,如果列表中缺少的日期时间是周六或周日,则该列表也为

示例

是连续的

1.

  • 2020-11-02(Mo(
  • 2020-10-30(Fr(
  • 2020-10-29(Th(
  • 2020-10-28(我们(
  • 2020-10-27(屠(
  • 2020-11-06(Fr(
  • 2020-11-05(Th(
  • 2020-11-04(我们(
  • 2020-11-03(屠(
  • 2020-11-02(月(

不是连续的

3.

  • 2020-11-03(屠(
  • 2020-10-30(Fr(
  • 2020-10-29(Th(
  • 2020-10-28(We(
  • 2020-10-27(屠(
  • 2020-11-06(Fr(
  • 2020-11-05(Th(
  • 2020-11-04(我们(
  • 2020-11-02(月(

我错过了周六周日逻辑。这是我的片段

public static bool IsSequential(IEnumerable<DateTime> dates)
{
var startDate = dates.FirstOrDefault();
return dates
.Select((d, i) => new {Date = d, Index = i})
.All(d => (d.Date - startDate).Days == d.Index);
}

另一种方法,假设递减:

public static bool IsSequential(IEnumerable<DateTime> dates)
{
if (dates != null)
{
DateTime nextDate = dates.FirstOrDefault().Date;
foreach (DateTime dt in dates)
{
if (!dt.Date.Equals(nextDate))
{
return false;
}
nextDate = dt.Date.AddDays(dt.DayOfWeek == DayOfWeek.Monday ? -3 : -1);
}
}            
return true;
}

您可能会这样做。当日期按升序和降序排列时,它应该起作用。

public static bool IsSequential(this IList<DateTime> dates)
{
DateTime currentDate;
DateTime nextDate;
for (int index = 0; index < dates.Count - 1; index++)
{
currentDate = dates[index];
nextDate = dates[index + 1];
var dayDiff = Math.Abs((nextDate.Date - currentDate.Date).Days);
var areSequentialDates = dayDiff == 1 ||
(dayDiff == 3 && (currentDate.DayOfWeek == DayOfWeek.Friday || nextDate.DayOfWeek == DayOfWeek.Friday));
if (!areSequentialDates)
return false;
}
return true;
}

最新更新