예제 #1
0
        public string BuildParse(string parse, DateTime now, DateParserConfig config = null)
        {
            var behavior = new CalculatedDatesBehavior();
            var result   = behavior.Parse(parse, now, config);

            return(result.HasValue ? result.Value.ToString("yyyy-MM-dd HH:mm:ss") : null);
        }
        public DateTime?Parse(string namedDate, DateTime now, DateParserConfig config)
        {
            switch (namedDate.ToLower())
            {
            case "jan":
            case "january":
                return(now.NextMonth(Month.January));

            case "feb":
            case "february":
                return(now.NextMonth(Month.Febuary));

            case "mar":
            case "march":
                return(now.NextMonth(Month.March));

            case "apr":
            case "april":
                return(now.NextMonth(Month.April));

            case "may":
                return(now.NextMonth(Month.May));

            case "jun":
            case "june":
                return(now.NextMonth(Month.June));

            case "jul":
            case "july":
                return(now.NextMonth(Month.July));

            case "aug":
            case "august":
                return(now.NextMonth(Month.August));

            case "sep":
            case "september":
                return(now.NextMonth(Month.September));

            case "oct":
            case "october":
                return(now.NextMonth(Month.October));

            case "nov":
            case "november":
                return(now.NextMonth(Month.November));

            case "dec":
            case "december":
                return(now.NextMonth(Month.December));

            default:
                return(null);
            }
        }
        public DateTime?Parse(string namedDate, DateTime now, DateParserConfig config)
        {
            switch (namedDate.ToLower())
            {
            case "later":
            case "someday":
                return(new DateTime(2038, 01, 18, 0, 0, 0));

            default:
                return(null);
            }
        }
        public DateTime?Parse(string namedDate, DateTime now, DateParserConfig config)
        {
            switch (namedDate.ToLower())
            {
            case "socy":
                return(now.StartOfYear());

            case "soy":
                return(now.AddYears(1).StartOfYear());

            case "eocy":
            case "eoy":
                return(now.EndOfYear());

            case "socq":
                return(now.StartOfQuarter());

            case "eocq":
            case "eoq":
                return(now.EndOfQuarter());

            case "soq":
                return(now.AddMonths(4).StartOfQuarter());

            case "socm":
                return(now.StartOfMonth());

            case "som":
                return(now.AddMonths(1).StartOfMonth());

            case "eocm":
            case "eom":
                return(now.EndOfMonth());

            default:
                return(null);
            }
        }
        public DateTime?Parse(string namedDate, DateTime now, DateParserConfig config)
        {
            switch (namedDate.ToLower())
            {
            case "socw":
                return(now.NextDayOfWeek(config.StartOfWeek).AddDays(-7));

            case "sow":
                return(now.NextDayOfWeek(config.StartOfWeek));

            case "soww":
                return(now.NextDayOfWeek(config.StartOfWorkWeek));

            case "eoww":
                return(now.NextDayOfWeek(config.EndOfWorkWeek).EndOfDay());

            case "eocw":
            case "eow":
                return(now.NextDayOfWeek(config.EndOfWeek).EndOfDay());

            case "sod":
            case "today":
                return(now.StartOfDay());

            case "eod":
                return(now.EndOfDay());

            case "yesterday":
                return(now.AddDays(-1).StartOfDay());

            case "now":
                return(now);

            default:
                return(null);
            }
        }
        public DateTime?Parse(string namedDate, DateTime now, DateParserConfig config)
        {
            var ordinalRegex = new Regex("^([1-3]*[0-9])(th|nd|rd|st)*$");
            var matches      = ordinalRegex.Match(namedDate.ToLower());

            if (!matches.Success)
            {
                return(null);
            }

            var dayOrdinal = int.Parse(matches.Groups[1].Value);

            if (dayOrdinal <= now.Day)
            {
                now = now.AddMonths(1);
            }

            if (dayOrdinal > now.DaysInMonth())
            {
                throw new Exception($"Month does not contain {dayOrdinal} days");
            }

            return(new DateTime(now.Year, now.Month, dayOrdinal));
        }
        public DateTime?Parse(string namedDate, DateTime now, DateParserConfig config)
        {
            switch (namedDate.ToLower())
            {
            case "mon":
            case "monday":
                return(now.NextDayOfWeek(DayOfWeek.Monday));

            case "tue":
            case "tuesday":
                return(now.NextDayOfWeek(DayOfWeek.Tuesday));

            case "wed":
            case "wednesday":
                return(now.NextDayOfWeek(DayOfWeek.Wednesday));

            case "thu":
            case "thursday":
                return(now.NextDayOfWeek(DayOfWeek.Thursday));

            case "fri":
            case "friday":
                return(now.NextDayOfWeek(DayOfWeek.Friday));

            case "sat":
            case "saturday":
                return(now.NextDayOfWeek(DayOfWeek.Saturday));

            case "sun":
            case "sunday":
                return(now.NextDayOfWeek(DayOfWeek.Sunday));

            default:
                return(null);
            }
        }
예제 #8
0
 public DateParser(IEnumerable <IDateParserBehavior> dateParserBehaviors, DateParserConfig config)
 {
     _config    = config;
     _behaviors = dateParserBehaviors;
 }