code: protected Integer parseTimezoneOffset(CharSequenceScanner scanner) {
  
      char c = scanner.forceNext();
      if ((c == '+') || (c == '-')) {
        boolean negate = (c == '-');
        int[] hourMinuteSecond = parseTime(scanner);
        int hour = hourMinuteSecond[0];
        int minute = hourMinuteSecond[1];
        int second = hourMinuteSecond[2];
        int timezoneOffset = ((((hour * 60) + minute) * 60) + second) * 1000;
        if (negate) {
          timezoneOffset = -timezoneOffset;
        }
        return Integer.valueOf(timezoneOffset);
      } else if (c == 0) {
        return null;
      } else if (c == 'Z') {
        // UTC
        return null;
      }
      throw new IllegalArgumentException("Illegal date-format \"" + scanner.toString() + "\"!");
    }
docs: This method parses the timezone offset from the given {@code scanner}.
  
  @param scanner is the parser pointing to the timezone or at the end of the string.
  @return the parsed timezone offset or {@code null} for UTC (Z) or if no timezone is present.