コード例 #1
0
        private static IEnumerable <string> ResolveTimeRange(TimexProperty timex, IEnumerable <TimeRange> constraints)
        {
            var candidate = TimexHelpers.TimeRangeFromTimex(timex);

            var result = new List <string>();

            foreach (var constraint in constraints)
            {
                if (TimexConstraintsHelper.IsOverlapping(candidate, constraint))
                {
                    var start = Math.Max(candidate.Start.GetTime(), constraint.Start.GetTime());
                    var time  = new Time(start);

                    // TODO: consider a method on TimexProperty to do this clone/overwrite pattern
                    var resolved = timex.Clone();
                    resolved.PartOfDay = null;
                    resolved.Seconds   = null;
                    resolved.Minutes   = null;
                    resolved.Hours     = null;
                    resolved.Second    = time.Second;
                    resolved.Minute    = time.Minute;
                    resolved.Hour      = time.Hour;

                    result.Add(resolved.TimexValue);
                }
            }

            return(result);
        }
コード例 #2
0
        private static IEnumerable <string> ResolveByTimeRangeConstraints(IEnumerable <string> candidates, IEnumerable <TimexProperty> timexConstraints)
        {
            var timeRangeConstraints = timexConstraints
                                       .Where((timex) => {
                return(timex.Types.Contains(Constants.TimexTypes.TimeRange));
            })
                                       .Select((timex) => {
                return(TimexHelpers.TimeRangeFromTimex(timex));
            });

            var collapsedTimeRanges = TimexConstraintsHelper.Collapse(timeRangeConstraints);

            if (!collapsedTimeRanges.Any())
            {
                return(candidates);
            }

            var resolution = new List <string>();

            foreach (var timex in candidates)
            {
                var r = ResolveTime(new TimexProperty(timex), collapsedTimeRanges);
                resolution.AddRange(r);
            }

            return(RemoveDuplicates(resolution));
        }