code: private int subParseNumericZone(String text, int start, int sign, int count,
                                      boolean colonRequired, CalendarBuilder calb) {
          int index = start;
  
        parse:
          try {
              char c = text.charAt(index++);
              // Parse hh
              int hours;
              if (!isDigit(c)) {
                  break parse;
              }
              hours = c - '0';
              c = text.charAt(index++);
              if (isDigit(c)) {
                  hours = hours * 10 + (c - '0');
              } else {
                  --index;
              }
              if (hours > 23) {
                  break parse;
              }
              int minutes = 0;
              if (count != 1) {
                  // Proceed with parsing mm
                  c = text.charAt(index++);
                  if (c == ':') {
                      c = text.charAt(index++);
                  } else if (colonRequired) {
                      break parse;
                  }
                  if (!isDigit(c)) {
                      break parse;
                  }
                  minutes = c - '0';
                  c = text.charAt(index++);
                  if (!isDigit(c)) {
                      break parse;
                  }
                  minutes = minutes * 10 + (c - '0');
                  if (minutes > 59) {
                      break parse;
                  }
              }
              minutes += hours * 60;
              calb.set(Calendar.ZONE_OFFSET, minutes * MILLIS_PER_MINUTE * sign)
                  .set(Calendar.DST_OFFSET, 0);
              return index;
          } catch (IndexOutOfBoundsException e) {
          }
          return  1 - index; // -(index - 1)
      }
docs: Parses numeric forms of time zone offset, such as "hh:mm", and
  sets calb to the parsed value.
  
  @param text  the text to be parsed
  @param start the character position to start parsing
  @param sign  1: positive; -1: negative
  @param count 0: 'Z' or "GMT+hh:mm" parsing; 1 - 3: the number of 'X's
  @param colonRequired true - colon required between hh and mm; false - no colon required
  @param calb  a CalendarBuilder in which the parsed value is stored
  @return updated parsed position, or its negative value to indicate a parsing error