/// <summary> /// Проверка попадания времени в указанный период /// </summary> /// <param name="Period">Указанный период</param> /// <param name="dateTimeOffset">Проверяемой время</param> /// <returns></returns> public static bool InPeriod(TimeOfPlaying Period, DateTimeOffset dateTimeOffset) { if (TimeSpan.Compare(dateTimeOffset.DateTime.TimeOfDay, Period.From.TimeOfDay) >= 0 && TimeSpan.Compare(dateTimeOffset.DateTime.TimeOfDay, Period.Before.TimeOfDay) <= 0) { return(true); } return(false); }
/// <summary> /// Возвращает -1, если текущий объект идет раньше передаваемого, возвращает 0, если периоды пересекаются, и 1, если текущий период идет позже передаваемого. /// </summary> /// <param name="t">Сравниваемый объект класса TimeOfPlaying</param> /// <returns></returns> public int CompareTo(TimeOfPlaying t) { if (this.From.TimeOfDay < t.From.TimeOfDay && this.Before.TimeOfDay < t.From.TimeOfDay) { return(-1); } if (this.From.TimeOfDay > t.Before.TimeOfDay && this.Before.TimeOfDay > t.Before.TimeOfDay) { return(1); } return(0); }
/// <summary> /// Объединение периодов в случае их пересечения на временном отрезке /// </summary> /// <param name="t2"></param> /// <returns></returns> public TimeOfPlaying Concat(TimeOfPlaying t) { if (this.CompareTo(t) == 0) { //Четыре ситуации: 1) внутри 2) снаружи) 3) Слева 4) справа if (this.From.TimeOfDay >= t.From.TimeOfDay && this.Before.TimeOfDay <= t.Before.TimeOfDay) { this.From = t.From; this.Before = t.Before; } if (this.From.TimeOfDay < t.From.TimeOfDay && this.Before.TimeOfDay < t.From.TimeOfDay) { this.Before = t.Before; } if (this.From.TimeOfDay < t.From.TimeOfDay && this.Before.TimeOfDay < t.From.TimeOfDay) { this.From = t.From; } } return(this); }
/// <summary> /// Объединение периодов времени проигрывания конента в разрезе дат. /// </summary> /// <param name="d1"></param> /// <param name="d2"></param> /// <returns></returns> public static IEnumerable <Dates> Union(IEnumerable <Dates> d1, IEnumerable <Dates> d2) { var _temp = Enumerable.Union(d1, d2).ToList(); var _temp2 = d1.Concat(d2); foreach (var d in _temp) { var i = _temp2.Where(t => t.Day.Date == d.Day.Date); if (i != null && i.Count() > 0) { ObservableCollection <TimeOfPlaying> _Temp = new ObservableCollection <TimeOfPlaying>(); foreach (var t in i) { _Temp = (ObservableCollection <TimeOfPlaying>)TimeOfPlaying.Concat(_Temp, t.timeOfPlayings); } d.timeOfPlayings = _Temp; } } return(_temp); }