예제 #1
0
        public static bool TryParse(string input, IFormatProvider provider, out IsoDuration result, out string errorMessage)
        {
            errorMessage = null;
            var  match   = IsoRegex.Match(input);
            bool success = match.Success;

            if (success)
            {
                var duration = new IsoDuration();

                bool negative = match.Groups[1].Success;
                duration.IsNegative = negative;

                var parser = new ParseField()
                {
                    IsNegative = negative
                };
                if (errorMessage == null)
                {
                    parser.TryParse(match.Groups[2].Value, provider, x => { duration.Years = x; }, out errorMessage);
                }
                if (errorMessage == null)
                {
                    parser.TryParse(match.Groups[3].Value, provider, x => { duration.Months = x; }, out errorMessage);
                }
                if (errorMessage == null)
                {
                    parser.TryParse(match.Groups[4].Value, provider, x => { duration.Weeks = x; }, out errorMessage);
                }
                if (errorMessage == null)
                {
                    parser.TryParse(match.Groups[5].Value, provider, x => { duration.Days = x; }, out errorMessage);
                }
                if (errorMessage == null)
                {
                    parser.TryParse(match.Groups[6].Value, provider, x => { duration.Hours = x; }, out errorMessage);
                }
                if (errorMessage == null)
                {
                    parser.TryParse(match.Groups[7].Value, provider, x => { duration.Minutes = x; }, out errorMessage);
                }
                if (errorMessage == null)
                {
                    parser.TryParse(match.Groups[8].Value, provider, x => { duration.Seconds = x; }, out errorMessage);
                }
                if (errorMessage == null)
                {
                    result  = duration;
                    success = true;
                }
                else
                {
                    result  = default(IsoDuration);
                    success = false;
                }
            }
            else
            {
                result = default(IsoDuration);
            }
            return(success);
        }