Так что, если я хорошо понимаю, вы хотели бы проверить, есть ли какое-либо пересечение между какой-либо датой и временем.
Обновлено:
Определите класс с интервалами:
class DateTimeInterval
{
public DateTime Start { get; }
public DateTime End { get; }
public TimeSpan Length { get { return End - Start; } }
public DateTimeInterval(DateTime startDate, DateTime endDate)
{
if (endDate < startDate)
throw new ArgumentException();
Start = startDate;
End = endDate;
}
public bool Intersect(DateTimeInterval other)
{
if((other.Start <= Start && other.End >= Start) || //left intersect
(other.End >= End && other.Start <= End) || //right intersect
(other.Start >= Start && other.End <= End)) //middle intersect
{
return true;
}
return false;
}
static public bool Intersect(DateTimeInterval dti1, DateTimeInterval dti2)
{
if ((dti1.Start <= dti2.Start && dti1.End >= dti2.Start) || //left intersect
(dti1.End >= dti2.End && dti1.Start <= dti2.End) || //right intersect
(dti1.Start >= dti2.Start && dti1.End <= dti2.End)) //middle intersect
{
return true;
}
return false;
}
}
И используйте здесь тестовый пример для класса:
List<DateTimeInterval> dtiList = new List<DateTimeInterval>();
DateTimeInterval dtInterval = new DateTimeInterval(new DateTime(2018, 09, 10), new DateTime(2018, 09, 20));
dtiList.Add(new DateTimeInterval(new DateTime(2018, 06, 12), new DateTime(2018, 7, 1)));
dtiList.Add(new DateTimeInterval(new DateTime(2018, 09, 05), new DateTime(2018, 09, 15)));
dtiList.Add(new DateTimeInterval(new DateTime(2018, 09, 12), new DateTime(2018, 09, 20)));
dtiList.Add(new DateTimeInterval(new DateTime(2018, 09, 11), new DateTime(2018, 09, 15)));
dtiList.Add(new DateTimeInterval(new DateTime(2018, 09, 5), new DateTime(2018, 09, 9)));
foreach(var dti in dtiList)
{
Console.WriteLine(DateTimeInterval.Intersect(dtInterval, dti));
}
Если у вас есть DateInterval0, DateInterval1, DateInterval2, DateInterval3, DateIntervalN , которые вы должны проверитьпересекается между
- DateInterval0 и DateInterval1
- DateInterval0 и DateInterval2
- ...
- DateInterval0 и DateIntervalN
- ...
- DateIntervalN-1 и DateIntervalN
И в вашей программе проверьте пересечение как:
for(var i = 0; i < dates.Length-2; ++i)
for(var j = i+1; i < dates.Length-1; ++j)
DateTimeInterval.Intersect(datesInterval[i], datesInterval[j]);