示例#1
0
        public Period ParseDates()
        {
            string startDatePattern = @"[cс]\s(\d{1,2}\s\S+\s\d{4})";
            string endDatePattern   = @"до\s(\d{1,2}\s\S+\s\d{4})";

            DateTime?enddate   = null;
            DateTime?startdate = null;

            // 1. parse End Date
            Match me = new Regex(endDatePattern, RegexOptions.IgnoreCase).Match(input);

            if (me.Success && DateTime.TryParseExact(me.Groups[1].Value, DateFormats, RuCulture, DateTimeStyles.None, out DateTime outdate))
            {
                enddate = outdate.ChangeTime(23, 59, 59, 0);
            }
            else
            {
                ParseError?.Invoke(this, "Cannot parse end date: " + me.Groups[1].Value);
            }

            Match ms = new Regex(startDatePattern, RegexOptions.IgnoreCase).Match(input);

            if (ms.Success && DateTime.TryParseExact(ms.Groups[1].Value, DateFormats, RuCulture, DateTimeStyles.None, out DateTime dt))
            {
                startdate = dt;
            }
            else
            {
                ParseError?.Invoke(this, "Cannot parse start date: " + ms.Groups[1].Value);
            }

            if ((startdate == null) && (enddate != null))
            {
                startdate = DateTime.Today;
            }

            return(new Period()
            {
                StartDate = startdate, EndDate = enddate
            });
        }