/// <summary> /// Gets an enumeration of the occurences ranges of this entry within the given interval. /// </summary> /// <param name="fromDt"></param> /// <param name="toDt"></param> /// <returns></returns> public override IEnumerable <ScheduleDateTimeRange> GetRangesInPeriod(DateTime fromDt, DateTime toDt) { DateTime startDt = fromDt.Date; DateTime endDt = toDt.Date + TimeSpan.FromDays(1); if (EndTimeInSeconds > SecondsPerDay) { startDt -= TimeSpan.FromDays(1); } DateTime wrkDt = startDt; for (; wrkDt < endDt; wrkDt += TimeSpan.FromDays(1)) { ScheduleDateTimeRange range = GetRangeForDay(wrkDt); if (range != null) { yield return(range); } } }
/// <summary> /// Checks whether the given time intersects with this entry. /// </summary> /// <param name="timeToTest"></param> /// <returns></returns> protected override bool Clash(DateTime timeToTest) { DateTime testTime = (Options & ScheduleEntryOptions.EVETime) != 0 ? timeToTest.ToUniversalTime() : timeToTest; ScheduleDateTimeRange range = GetRangeForDay(testTime.Date); if (range == null) { return(false); } DateTime startDate = StartDate.Add(range.From.TimeOfDay); // in the event m_endDate is set to Forever (DateTime.MaxValue) we can't add anything to it DateTime endDate = EndDate == DateTime.MaxValue ? EndDate : EndDate.Add(range.From.TimeOfDay); if (startDate < testTime && testTime < endDate) { return(range.From < testTime && testTime < range.To); } return(false); }