private static bool parseDate(StringCharacterIterator iter, Datetime datetime)
        {
            short num = (short)DatetimeIso8601Util.parseUnsigned(iter, 2147483647);

            if (iter.current() != '-')
            {
                return(false);
            }
            iter.next();
            short num2 = (short)DatetimeIso8601Util.parseUnsigned(iter, 2147483647);

            if (iter.current() != '-')
            {
                return(false);
            }
            iter.next();
            short num3 = (short)DatetimeIso8601Util.parseUnsigned(iter, 2147483647);

            if (num != 1 || num2 != 1 || num3 != 1)
            {
                datetime.Year       = (int)num;
                datetime.Month      = (int)num2;
                datetime.DayOfMonth = (int)num3;
            }
            return(true);
        }
        private static long parseUnsignedFixedWidth(StringCharacterIterator iter, int limit)
        {
            long num = 0L;
            int  i   = 0;
            char c   = iter.current();

            while (c != '￿')
            {
                if (i >= limit)
                {
                    break;
                }
                if (!char.IsDigit(c))
                {
                    break;
                }
                num = num * 10L + (long)((ulong)c) - 48L;
                c   = iter.next();
                i++;
            }
            while (i < limit)
            {
                num *= 10L;
                i++;
            }
            return(num);
        }
        private static int parseUnsigned(StringCharacterIterator iter, int limit)
        {
            int  num  = 0;
            int  num2 = 0;
            char c    = iter.current();

            while (c != '￿' && num2 < limit && char.IsDigit(c))
            {
                num = num * 10 + (int)c - 48;
                c   = iter.next();
                num2++;
            }
            return(num);
        }
        private static bool parseTime(StringCharacterIterator iter, Datetime time)
        {
            short num = (short)DatetimeIso8601Util.parseUnsigned(iter, 2147483647);

            if (iter.current() != ':')
            {
                return(false);
            }
            iter.next();
            short num2 = (short)DatetimeIso8601Util.parseUnsigned(iter, 2147483647);

            if (iter.current() != ':')
            {
                return(false);
            }
            iter.next();
            short num3 = (short)DatetimeIso8601Util.parseUnsigned(iter, 2147483647);
            long  num4 = 0L;

            if (iter.current() == '.')
            {
                iter.next();
                num4 = DatetimeIso8601Util.parseUnsignedFixedWidth(iter, 12);
                char c = iter.current();
                while (c != '￿' && char.IsDigit(c))
                {
                    c = iter.next();
                }
            }
            if (num != 24 || num2 != 0 || num3 != 0 || num4 != 0L)
            {
                time.Hour       = (int)num;
                time.Minute     = (int)num2;
                time.Second     = (int)num3;
                time.PicoSecond = num4;
            }
            return(true);
        }
        private static bool parseTimezoneOffset(StringCharacterIterator iter, Datetime datetime)
        {
            short num;

            if (iter.current() == '+')
            {
                num = 1;
            }
            else
            {
                if (iter.current() == '-')
                {
                    num = -1;
                }
                else
                {
                    if (iter.current() == 'Z' || iter.current() == 'z')
                    {
                        datetime.TimezoneOffsetMinutes = 0;
                        return(true);
                    }
                    return(false);
                }
            }
            iter.next();
            short num2 = (short)DatetimeIso8601Util.parseUnsigned(iter, 2147483647);

            if (iter.current() != ':')
            {
                return(false);
            }
            iter.next();
            short num3 = (short)DatetimeIso8601Util.parseUnsigned(iter, 2147483647);

            datetime.TimezoneOffsetMinutes = (int)(num * (num2 * 60 + num3));
            return(true);
        }
        public static bool parseTime(string strTime, Datetime time)
        {
            StringCharacterIterator iter = new StringCharacterIterator(strTime);

            return(DatetimeIso8601Util.parseTime(iter, time));
        }
        public static bool parseDateTz(string strDate, Datetime date)
        {
            StringCharacterIterator iter = new StringCharacterIterator(strDate);

            return(DatetimeIso8601Util.parseDateTz(iter, date));
        }
 private static bool parseTimeTz(StringCharacterIterator iter, Datetime timeTz)
 {
     return
         (DatetimeIso8601Util.parseTime(iter, timeTz) &&
          (iter.current() == '￿' || DatetimeIso8601Util.parseTimezoneOffset(iter, timeTz)));
 }