public static DateRange FindIntersect(DateRange t1, DateRange t2) { var iRange = new DateRange { Start = t1.Start < t2.Start ? t2.Start : t1.Start, End = t1.End < t2.End ? t1.End : t2.End }; return iRange.Start >= iRange.End ? null : iRange; }
/// <summary> /// Returns -1 no conflict, Return 0 ignore first Return 1 ignore 2nd /// </summary> private static int IsConflictOrOverLap(ICongestionRate cp1, ICongestionRate cp2, Day day, VehicleType type) { var cr1DateRange = new DateRange(cp1.Start, cp1.End); var cr2DateRange = new DateRange(cp2.Start, cp2.End); var intersect = DateTimeIntersect.FindIntersect(cr1DateRange, cr2DateRange); if (intersect == null) return -1; return SelectTheMoreSpecific(cp1, cp2, day, type); }
private static DateRange GetIntersectingTime(DateTime start, DateTime end, ICongestionRate rate) { var timeSpent = new DateRange(start, end); var congestionRateRange = new DateRange(AddDatePartToCongestionTime(start, rate.Start), AddDatePartToCongestionTime(start, rate.End, true)); return DateTimeIntersect.FindIntersect(timeSpent, congestionRateRange); }