Ejemplo n.º 1
0
        private DateTimeResolutionResult ParseSpecialTimeOfDate(string text, DateObject refDateTime)
        {
            var ret = ParseUnspecificTimeOfDate(text, refDateTime);

            if (ret.Success)
            {
                return(ret);
            }

            var ers = this.config.DateExtractor.Extract(text, refDateTime);

            if (ers.Count != 1)
            {
                return(ret);
            }

            var beforeStr = text.Substring(0, ers[0].Start ?? 0);
            var afterStr  = text.Substring(ers[0].Start + ers[0].Length ?? 0);

            if (this.config.SpecificEndOfRegex.IsMatch(beforeStr) || this.config.SpecificEndOfRegex.IsMatch(afterStr))
            {
                var pr         = this.config.DateParser.Parse(ers[0], refDateTime);
                var futureDate = (DateObject)((DateTimeResolutionResult)pr.Value).FutureValue;
                var pastDate   = (DateObject)((DateTimeResolutionResult)pr.Value).PastValue;

                ret = DateTimeFormatUtil.ResolveEndOfDay(pr.TimexStr, futureDate, pastDate);
            }

            return(ret);
        }
Ejemplo n.º 2
0
        private DateTimeResolutionResult ParseUnspecificTimeOfDate(string text, DateObject refDateTime)
        {
            // Handle 'eod', 'end of day'
            var ret = new DateTimeResolutionResult();
            var eod = this.config.UnspecificEndOfRegex.Match(text);

            if (eod.Success)
            {
                ret = DateTimeFormatUtil.ResolveEndOfDay(DateTimeFormatUtil.FormatDate(refDateTime), refDateTime, refDateTime);
            }

            return(ret);
        }
        private DateTimeResolutionResult ParseSpecialTimeOfDate(string text, DateObject refDateTime)
        {
            var ret = new DateTimeResolutionResult();
            var ers = this.config.DateExtractor.Extract(text, refDateTime);

            if (ers.Count != 1)
            {
                return(ret);
            }

            var pr         = this.config.DateParser.Parse(ers[0], refDateTime);
            var futureDate = (DateObject)((DateTimeResolutionResult)pr.Value).FutureValue;
            var pastDate   = (DateObject)((DateTimeResolutionResult)pr.Value).PastValue;

            ret = DateTimeFormatUtil.ResolveEndOfDay(pr.TimexStr, futureDate, pastDate);

            return(ret);
        }
        private DateTimeResolutionResult ParseTimeOfSpecialDayRegex(string text, DateObject referenceTime)
        {
            var ret = new DateTimeResolutionResult();
            var ers = this.config.TimeExtractor.Extract(text, referenceTime);

            // Handle 'eod', 'end of day'
            var eod = this.config.TimeOfSpecialDayRegex.Match(text);

            if (eod.Groups[Constants.SpecificEndOfGroupName].Success && ers.Count == 0)
            {
                ret = ParseSpecialTimeOfDate(text, referenceTime);
                return(ret);
            }

            if (eod.Success && ers.Count != 1)
            {
                ret = DateTimeFormatUtil.ResolveEndOfDay(DateTimeFormatUtil.FormatDate(referenceTime), referenceTime, referenceTime);
                return(ret);
            }

            if (ers.Count != 1)
            {
                return(ret);
            }

            // TODO: Add reference time
            var pr = this.config.TimeParser.Parse(ers[0], referenceTime);

            if (pr.Value == null)
            {
                return(ret);
            }

            var time = (DateObject)((DateTimeResolutionResult)pr.Value).FutureValue;

            var hour = time.Hour;
            var min  = time.Minute;
            var sec  = time.Second;

            var match = this.config.TimeOfSpecialDayRegex.Match(text);

            if (match.Success)
            {
                var matchStr = match.Value;

                var swift = 0;

                this.config.AdjustByTimeOfDay(matchStr, ref hour, ref swift);

                var date = referenceTime.AddDays(swift).Date;

                // in this situation, luisStr cannot end up with "ampm", because we always have a "morning" or "night"
                var timeStr = pr.TimexStr;
                if (timeStr.EndsWith(Constants.Comment_AmPm, StringComparison.Ordinal))
                {
                    timeStr = timeStr.Substring(0, timeStr.Length - 4);
                }

                // handle less and more mode
                if (match.Groups[Constants.LessGroupName].Success)
                {
                    ret.Mod = Constants.LESS_THAN_MOD;
                }
                else if (match.Groups[Constants.MoreGroupName].Success)
                {
                    ret.Mod = Constants.MORE_THAN_MOD;
                }

                timeStr = "T" + hour.ToString("D2", CultureInfo.InvariantCulture) + timeStr.Substring(3);

                ret.Timex       = DateTimeFormatUtil.FormatDate(date) + timeStr;
                ret.FutureValue = ret.PastValue = DateObject.MinValue.SafeCreateFromValue(date.Year, date.Month, date.Day, hour, min, sec);
                ret.Success     = true;
                return(ret);
            }

            return(ret);
        }