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); }
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); }