Timezone specification like +HHMM without colon gives incorrect minutes
- [x] I have checked that this issue has not already been reported.

- [x] I have confirmed this bug exists on the latest version of pandas.

- [ ] (optional) I have confirmed this bug exists on the master branch of pandas.

---

**Note**: Please read [this guide](https://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports) detailing how to provide the necessary information for us to reproduce your bug.

#### Code Sample, a copy-pastable example

```python
import pandas as pd

# good:
# Australia/Adelaide
print(pd.Timestamp(0, tz="+09:30")) # 1970-01-01 09:30:00+09:30
# Asia/Kathmandu
print(pd.Timestamp(0, tz="+05:45")) # 1970-01-01 05:45:00+05:45

# bad:
print(pd.Timestamp(0, tz="+0930")) # 1970-01-01 09:00:00+09:00
print(pd.Timestamp(0, tz="+0545")) # 1970-01-01 05:05:00+05:05

# bonus:
# pd.Timestamp(0, tz="+09") # ValueError: invalid literal for int() with base 10: '+'

pd.show_versions()
```

#### Problem description

A timezone specified as an explicit offset without a colon (`[+-]HHMM`) is passed incorrectly through args like `Timestamp(tz=...)` and functions like `tz_localize`. In particular, it looks like the code assumes that any string that starts with `+` or `-` will be formatted like `[+-]HH:MM` without validation (and similarly `UTC[+-]HH:MM`):

https://github.com/pandas-dev/pandas/blob/dae5c5972aa539dcd5ba633e8d56735d61cfe7ae/pandas/_libs/tslibs/timezones.pyx#L125-L132

A timezone offset without a colon is apparently valid in ISO8601 https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC (it is not valid RFC3339, which requires a colon). `+HH` is also valid ISO8601, and that results in an exception (see "bonus" section in the example).

The lack of validation this also allows weird and wacky specifications, like `+09%30abcdef1234`, equivalent to `+09:30`.

#### Expected Output

The "bad" section should have the same output as the "good" section in the example, with the timezone passed through without losing the minutes details.

#### Output of ``pd.show_versions()``

<details>

INSTALLED VERSIONS
------------------
commit           : 2cb96529396d93b46abab7bbc73a208e708c642e
python           : 3.8.7.final.0
python-bits      : 64
OS               : Darwin
OS-release       : 20.2.0
Version          : Darwin Kernel Version 20.2.0: Wed Dec  2 20:40:21 PST 2020; root:xnu-7195.60.75~1/RELEASE_ARM64_T8101
machine          : arm64
processor        : arm
byteorder        : little
LC_ALL           : None
LANG             : en_AU.UTF-8
LOCALE           : en_AU.UTF-8

pandas           : 1.2.4
numpy            : 1.20.2
pytz             : 2021.1
dateutil         : 2.8.1
pip              : 21.1.1
setuptools       : 49.2.1
Cython           : None
pytest           : 6.1.2
hypothesis       : None
sphinx           : None
blosc            : None
feather          : None
xlsxwriter       : None
lxml.etree       : None
html5lib         : None
pymysql          : None
psycopg2         : 2.8.6 (dt dec pq3 ext lo64)
jinja2           : 2.11.3
IPython          : 7.22.0
pandas_datareader: None
bs4              : None
bottleneck       : None
fsspec           : None
fastparquet      : None
gcsfs            : None
matplotlib       : None
numexpr          : None
odfpy            : None
openpyxl         : None
pandas_gbq       : None
pyarrow          : None
pyxlsb           : None
s3fs             : None
scipy            : None
sqlalchemy       : 1.3.20
tables           : None
tabulate         : None
xarray           : None
xlrd             : None
xlwt             : None

</details>
