예제 #1
0
        protected override object ParseDate(object value)
        {
            if (value is BetweenValue)
            {
                var between  = value as BetweenValue;
                var newTween = new BetweenValue();
                newTween.From = between.From == null ? null : ParseDate(between.From);
                newTween.To   = between.To == null ? null : ParseDate(between.To);
                return(newTween);
            }
            else if (value is string)
            {
                var str = ((string)value).Trim().ToLower();
                foreach (var matcher in _matchers)
                {
                    var match = matcher.Key.Match(str);
                    if (match.Success)
                    {
                        return(matcher.Value(match));
                    }
                }
            }

            return(base.ParseDate(value));
        }
예제 #2
0
        public void IntValue_CheckValues()
        {
            var betweenValue = new BetweenValue(1, 5);

            Assert.AreEqual(1, ((INumericValue <int>)betweenValue.FirstValue).Value);
            Assert.AreEqual(5, ((INumericValue <int>)betweenValue.SecondValue).Value);
        }
예제 #3
0
        protected virtual object ParseDate(object value)
        {
            if (value is DateTime)
            {
                return(new DateValue(((DateTime)value).Date, ((DateTime)value).Date.AddDays(1)));
            }
            else if (value is BetweenValue)
            {
                var between  = value as BetweenValue;
                var newTween = new BetweenValue();
                newTween.From = between.From == null ? null : ParseDate(between.From);
                newTween.To   = between.To == null ? null : ParseDate(between.To);
                return(newTween);
            }
            else if (value is string)
            {
                var date = (string)value;

                var      ci      = new System.Globalization.CultureInfo("en-AU");
                var      formats = GetDateTimeFormats();
                DateTime result  = DateTime.MinValue;

                for (int i = 0; i < formats.Length; i++)
                {
                    var format = formats[i];
                    if (DateTime.TryParseExact(date, format, ci, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out result))
                    {
                        var end = result.Date;
                        if (format.Contains("d"))
                        {
                            end = end.AddDays(1);
                        }
                        else if (format.Contains("M"))
                        {
                            end = end.AddMonths(1); // we have our month, but not our day
                        }
                        else if (format.Contains("y"))
                        {
                            end = end.AddYears(1);  // we have our year, but not our month/day
                        }
                        return(new DateValue(result.Date, end));
                    }
                }

                // if we can parse a date using the built-in then we're dealing with a single day
                if (DateTime.TryParse(date, ci, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out result))
                {
                    return(new DateValue(result.Date, result.Date.AddDays(1)));
                }
            }

            // unable to parse
            throw new FormatException(String.Format("Could not intepret date value '{0}'.", value));
        }