using System.Collections.Generic;
public DateTime ActiveDate;
public DateTime ExpireDate;
public static void Main()
List<Dates> datesList = new List<Dates>();
datesList.Add(new Dates{Name = "A", ActiveDate = new DateTime(2017, 8, 20), ExpireDate = new DateTime(2017, 8, 23)});
datesList.Add(new Dates{Name = "B", ActiveDate = new DateTime(2017, 8, 20), ExpireDate = new DateTime(2017, 8, 22)});
datesList.Add(new Dates{Name = "C", ActiveDate = new DateTime(2017, 8, 22, 23, 0, 0), ExpireDate = new DateTime(2017, 8, 26)});
datesList.Add(new Dates{Name = "D", ActiveDate = new DateTime(2017, 8, 20), ExpireDate = new DateTime(2017, 8, 23)});
for (var i = 0; i < datesList.Count; i++)
for (var j = i + 1; j < datesList.Count; j++)
bool isOverlap = Compare(item, datesList[j]);
private static DateTime? overlapStart
private static DateTime? overlapEnd
private static bool Compare(Dates a, Dates b)
DateTime? tStartA = a.ActiveDate;
DateTime? tEndA = a.ExpireDate;
DateTime? tStartB = b.ActiveDate;
DateTime? tEndB = b.ExpireDate;
bool overlap = (tStartA <= tEndB || tEndB == null) && (tStartB <= tEndA || tEndA == null);
DateTime? overlapStart = null;
DateTime? overlapEnd = null;
overlapStart = (tStartA >= tStartB) ? tStartA : tStartB;
overlapEnd = (tEndA <= tEndB) ? tEndA : tEndB;
if (overlapStart > overlapStart || overlapStart == null)
overlapStart = overlapStart;
if (overlapEnd < overlapEnd || overlapEnd == null)
string overlapStartShortDateString = overlapStart.ToString();
string overlapEndShortDateString = overlapEnd.ToString();
Console.WriteLine(a.Name + " and " + b.Name + " Overlap from " + overlapStartShortDateString + " TO: " + overlapEndShortDateString);
Console.WriteLine(a.Name + " and " + b.Name + " DO NOT Overlap");