// simple cases made by a number followed an unit private DateTimeResolutionResult ParseNumberWithUnit(string text, DateObject referenceTime) { DateTimeResolutionResult ret; if ((ret = ParseNumberSpaceUnit(text)).Success) { return(ret); } if ((ret = ParseNumberCombinedUnit(text)).Success) { return(ret); } if ((ret = ParseAnUnit(text)).Success) { return(ret); } if ((ret = DurationParsingUtil.ParseInexactNumberUnit(text, this.config)).Success) { return(ret); } return(ret); }
public DateTimeParseResult Parse(ExtractResult er, DateObject refDate) { var referenceTime = refDate; var dateTimeParseResult = ParseMergedDuration(er.Text, referenceTime); if (!dateTimeParseResult.Success) { dateTimeParseResult = DurationParsingUtil.ParseInexactNumberUnit(er.Text, this.config); } if (!dateTimeParseResult.Success) { var parseResult = this.config.InternalParser.Parse(er); var unitResult = parseResult.Value as UnitValue; if (unitResult == null) { return(null); } var unitStr = unitResult.Unit; var number = string.IsNullOrEmpty(unitResult.Number) ? 1 : double.Parse(unitResult.Number, CultureInfo.InvariantCulture); dateTimeParseResult.Timex = TimexUtility.GenerateDurationTimex(number, unitStr, DurationParsingUtil.IsLessThanDay(unitStr)); dateTimeParseResult.FutureValue = dateTimeParseResult.PastValue = number * this.config.UnitValueMap[unitStr]; dateTimeParseResult.Success = true; } if (dateTimeParseResult.Success) { dateTimeParseResult.FutureResolution = new Dictionary <string, string> { { TimeTypeConstants.DURATION, dateTimeParseResult.FutureValue.ToString() }, }; dateTimeParseResult.PastResolution = new Dictionary <string, string> { { TimeTypeConstants.DURATION, dateTimeParseResult.PastValue.ToString() }, }; } if (dateTimeParseResult.Success) { var moreOrLessMatch = config.MoreOrLessRegex.Match(er.Text); if (moreOrLessMatch.Success) { if (moreOrLessMatch.Groups["less"].Success) { dateTimeParseResult.Mod = Constants.LESS_THAN_MOD; } else if (moreOrLessMatch.Groups["more"].Success) { dateTimeParseResult.Mod = Constants.MORE_THAN_MOD; } } } var ret = new DateTimeParseResult { Text = er.Text, Start = er.Start, Length = er.Length, Type = er.Type, Data = er.Data, Value = dateTimeParseResult, TimexStr = dateTimeParseResult.Timex, ResolutionStr = string.Empty, }; return(ret); }