CSharp · Console
using System;
using System.Data;
using System.Collections.Generic;
public class Program
{
public class Dates
{
public DateTime ActiveDate;
public DateTime ExpireDate;
public string Name;
}
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)}); //Aug 20 - Aug 23
datesList.Add(new Dates{Name = "B", ActiveDate = new DateTime(2017, 8, 20), ExpireDate = new DateTime(2017, 8, 22)}); //Aug 20 - Aug 22
datesList.Add(new Dates{Name = "C", ActiveDate = new DateTime(2017, 8, 22, 23, 0, 0), ExpireDate = new DateTime(2017, 8, 26)}); //Aug 22 11pm - Aug 26
datesList.Add(new Dates{Name = "D", ActiveDate = new DateTime(2017, 8, 20), ExpireDate = new DateTime(2017, 8, 23)}); //Aug 20 - Aug23
int numOverlapped = 0;
for (var i = 0; i < datesList.Count; i++)
{
var item = datesList[i];
for (var j = i + 1; j < datesList.Count; j++)
{
bool isOverlap = Compare(item, datesList[j]);
if (isOverlap)
{
numOverlapped++;
}
}
}
}
private static DateTime? overlapStart
{
get;
set;
}
private static DateTime? overlapEnd
{
get;
set;
}
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;
if (overlap)
{
//Find maximum start date.
overlapStart = (tStartA >= tStartB) ? tStartA : tStartB;
//Find Min End date between the two
overlapEnd = (tEndA <= tEndB) ? tEndA : tEndB;
if (overlapStart > overlapStart || overlapStart == null)
{
overlapStart = overlapStart;
}
if (overlapEnd < overlapEnd || overlapEnd == null)
{
overlapEnd = overlapEnd;
}
}
string overlapStartShortDateString = overlapStart.ToString();
string overlapEndShortDateString = overlapEnd.ToString();
if (overlap)
Console.WriteLine(a.Name + " and " + b.Name + " Overlap from " + overlapStartShortDateString + " TO: " + overlapEndShortDateString);
else
{
Console.WriteLine(a.Name + " and " + b.Name + " DO NOT Overlap");
}
return overlap;
}
}