BUG: Correct Timestamp localization with tz near DST (#11481)
State: closed

 - [x] closes #11481, #15777
 - [x] tests added / passed
 - [x] passes ``git diff upstream/master --name-only -- '*.py' | flake8 --diff``
 - [x] whatsnew entry

Seemed that the `Timestamp` constructor with a string incorrectly localized a naive time with `tz_convert_single` instead of `tz_localize_to_utc` which is similar to how `DatetimeIndex` localizes.

Now the `Timestamp` will raise an error if an ambiguous combination of string and timezone is passed. Should this be the default behavior?

I had to slightly change 2 existing tests. `test_timestamp_to_datetime_tzoffset` used a now ambiguous timestamp and `test_setitem_with_tz_dst` had an incorrect expected timestamp.

Labels:
name: Bug
name: Timezones
description: Timezone data dtype

Comments:
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/15934?src=pr&el=h1) Report
> Merging [#15934](https://codecov.io/gh/pandas-dev/pandas/pull/15934?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/0aef74fdf1e943f058aa185f47e322aafeeee002?src=pr&el=desc) will **increase** coverage by `<.01%`.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/15934/graphs/tree.svg?width=650&height=150&src=pr&token=eZ4WkYLtcO)](https://codecov.io/gh/pandas-dev/pandas/pull/15934?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #15934      +/-   ##
==========================================
+ Coverage   90.99%   90.99%   +<.01%     
==========================================
  Files         145      145              
  Lines       49570    49570              
==========================================
+ Hits        45106    45107       +1     
+ Misses       4464     4463       -1
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `88.76% <ø> (ø)` | :arrow_up: |
| #single | `40.56% <ø> (ø)` | :arrow_up: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/15934?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/tseries/index.py](https://codecov.io/gh/pandas-dev/pandas/pull/15934?src=pr&el=tree#diff-cGFuZGFzL3RzZXJpZXMvaW5kZXgucHk=) | `95.43% <0%> (+0.09%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/15934?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/15934?src=pr&el=footer). Last update [0aef74f...a7ee890](https://codecov.io/gh/pandas-dev/pandas/pull/15934?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
can you scour the xref'ed issues for any more test cases and see if this closes any linked issues? (if you did already then ok).
Added some additional tests and described the error. 

Addtionally, I tried dropping in `tz_localize_to_utc` to replace `tz_convert_single` and things were breaking. I think `tz_convert_single` is necessary in some places to convert from UTC to local timestamps (e.g. to show local time attributes instead of UTC time attributes)
thanks @mroeschke added some more tests. will merge on pass.