System.DateTimeParse.ParseTimeZoneOffset C# (CSharp) Method

ParseTimeZoneOffset() private static method

private static ParseTimeZoneOffset ( __DTString &str, int len, TimeSpan &result ) : bool
str __DTString
len int
result TimeSpan
return bool
        private static bool ParseTimeZoneOffset(ref __DTString str, int len, ref TimeSpan result) {
            bool isPositive = true;
            int hourOffset;
            int minuteOffset = 0;

            switch (len) {
                case 1:
                case 2:
                    if (!ParseSign(ref str, ref isPositive)) {
                        return (false);
                    }
                    if (!ParseDigits(ref str, len, out hourOffset)) {
                        return (false);
                    }
                    break;
                default:
                    if (!ParseSign(ref str, ref isPositive)) {
                        return (false);
                    }

                    // Parsing 1 digit will actually parse 1 or 2.
                    if (!ParseDigits(ref str, 1, out hourOffset)) {
                        return (false);
                    }
                    // ':' is optional.
                    if (str.Match(":")) {
                        // Found ':'
                        if (!ParseDigits(ref str, 2, out minuteOffset)) {
                            return (false);
                        }
                    } else {
                        // Since we can not match ':', put the char back.
                        str.Index--;
                        if (!ParseDigits(ref str, 2, out minuteOffset)) {
                            return (false);
                        }
                    }
                    break;
            }
            if (minuteOffset < 0 || minuteOffset >= 60) {
                return false;
            }
            result = (new TimeSpan(hourOffset, minuteOffset, 0));
            if (!isPositive) {
                result = result.Negate();
            }
            return (true);
        }