Itenso.TimePeriod.TimeRange.GetIntersection C# (CSharp) 메소드

GetIntersection() 공개 메소드

public GetIntersection ( ITimePeriod period ) : ITimeRange
period ITimePeriod
리턴 ITimeRange
        public virtual ITimeRange GetIntersection( ITimePeriod period )
        {
            if ( period == null )
            {
                throw new ArgumentNullException( "period" );
            }
            if ( !IntersectsWith( period ) )
            {
                return null;
            }
            DateTime periodStart = period.Start;
            DateTime periodEnd = period.End;
            return new TimeRange(
                periodStart > start ? periodStart : start,
                periodEnd < end ? periodEnd : end,
                IsReadOnly );
        }

Usage Example

예제 #1
0
        }         // CalcDayllightDuration

        // ----------------------------------------------------------------------
        protected virtual TimeSpan DoCalcDuration(DateTime start, DateTime end, TimeZoneInfo timeZone = null)
        {
            if (start.Equals(end))
            {
                return(TimeSpan.Zero);
            }

            // test range
            TimeRange testRange = new TimeRange(start, end);

            // search range
            DateTime  searchStart  = new Day(testRange.Start).Start;
            DateTime  serachEnd    = new Day(testRange.End).GetNextDay().Start;
            TimeRange searchPeriod = new TimeRange(searchStart, serachEnd);

            // exclude periods
            filter.ExcludePeriods.Clear();
            filter.ExcludePeriods.AddAll(excludePeriods);

            // collect hours
            TimeCalendar calendar = new TimeCalendar(new TimeCalendarConfig {
                EndOffset = TimeSpan.Zero
            });
            CalendarPeriodCollector collector = new CalendarPeriodCollector(filter, searchPeriod, SeekDirection.Forward, calendar);

            collector.CollectHours();

            TimeSpan duration = TimeSpan.Zero;

            collector.Periods.AddAll(includePeriods);
            foreach (ICalendarTimeRange period in collector.Periods)
            {
                // get the intersection of the test-range and the day hours
                ITimePeriod intersection = testRange.GetIntersection(period);
                if (intersection == null)
                {
                    continue;
                }
                duration = duration.Add(durationProvider.GetDuration(intersection.Start, intersection.End));
            }

            return(start < end ? duration : duration.Negate());
        }         // DoCalcDuration
All Usage Examples Of Itenso.TimePeriod.TimeRange::GetIntersection