code: private int parseDefaultOffsetFields(String text, int start, char separator, int[] parsedLen) {
          int max = text.length();
          int idx = start;
          int[] len = {0};
          int hour = 0, min = 0, sec = 0;
  
          do {
              hour = parseOffsetFieldWithLocalizedDigits(text, idx, 1, 2, 0, MAX_OFFSET_HOUR, len);
              if (len[0] == 0) {
                  break;
              }
              idx += len[0];
  
              if (idx + 1 < max && text.charAt(idx) == separator) {
                  min = parseOffsetFieldWithLocalizedDigits(text, idx + 1, 2, 2, 0, MAX_OFFSET_MINUTE, len);
                  if (len[0] == 0) {
                      break;
                  }
                  idx += (1 + len[0]);
  
                  if (idx + 1 < max && text.charAt(idx) == separator) {
                      sec = parseOffsetFieldWithLocalizedDigits(text, idx + 1, 2, 2, 0, MAX_OFFSET_SECOND, len);
                      if (len[0] == 0) {
                          break;
                      }
                      idx += (1 + len[0]);
                  }
              }
          } while (false);
  
          if (idx == start) {
              parsedLen[0] = 0;
              return 0;
          }
  
          parsedLen[0] = idx - start;
          return hour * MILLIS_PER_HOUR + min * MILLIS_PER_MINUTE + sec * MILLIS_PER_SECOND;
      }
docs: Parses the input GMT offset fields with the default offset pattern.
  @param text the input text
  @param start the start index
  @param separator the separator character, e.g. ':'
  @param parsedLen the parsed length, or 0 on failure.
  @return the parsed offset in milliseconds.