NSoft.NFramework.TimePeriods.Calendars.DateAdd.FindNextPeriod C# (CSharp) Method

FindNextPeriod() private static method

startperiods의 기간 중에 가장 가까운 기간에 속해 있으면 그 값을 반환하고, 아니면 start와 가장 근접한 후행 ITimePeriod를 찾는다. moment에는 가장 가까운 TimePeriod의 Start 속성 값을 지정합니다.
private static FindNextPeriod ( System.DateTime start, IEnumerable periods, System.DateTime &moment ) : ITimePeriod
start System.DateTime
periods IEnumerable
moment System.DateTime
return ITimePeriod
        private static ITimePeriod FindNextPeriod(DateTime start, IEnumerable<ITimePeriod> periods, out DateTime moment) {
            //! assumes no no overlapping periods in parameter periods (HashSet<ITimePeriod> 겠지?)	

            if(IsDebugEnabled)
                log.Debug("시작시각의 이후 기간을 찾습니다... start=[{0}], periods=[{1}]", start, periods.CollectionToString());

            ITimePeriod nearestPeriod = null;
            var diffence = TimeSpan.MaxValue;
            moment = start;

            foreach(var period in periods) {
                // start가 기간에 속한다면...
                if(period.HasInside(start)) {
                    nearestPeriod = period;
                    moment = start;
                    break;
                }

                // 기간이 start 이전이라면 (Before)
                if(period.End < start)
                    continue;

                // 근처 값이 아니라면 포기 
                var periodToMement = period.Start - start;
                if(periodToMement >= diffence)
                    continue;

                diffence = periodToMement;
                nearestPeriod = period;
                moment = nearestPeriod.Start;
            }

            if(IsDebugEnabled)
                log.Debug("시작시각의 다음 기간을 찾았습니다!!! start=[{0}], moment=[{1}], nearestPeriod=[{2}]", start, moment, nearestPeriod);

            return nearestPeriod;
        }