BUG: Do not round DatetimeIndex nanosecond precision when iterating
State: closed

- [x] closes #19603
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

~~This issue was actually very specific to localizing a `DatetimeIndex` with `datetime.timezone.utc`~~

```
# On master
In [1]: import pandas as pd

In [2]: datetimeindex = pd.DatetimeIndex(["2018-02-08 15:00:00.168456358"], tz='UTC')

In [3]: list(datetimeindex)[0] == datetimeindex[0] # returned False with datetime.timezone.utc
Out[3]: True 
```

~~I realize our timezone support relies heavily on pytz and dateutil, but I am curious how much support we have for `datetime.timezone` objects.~~

So the actual issue was that `datetime.timezone.utc` is (rightly) considered a fixed offset, and the code path was calculating the new value with Python `datetimes` and `timedeltas` which doesn't yet support nanosecond resolution. 



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

Comments:
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/19628?src=pr&el=h1) Report
> Merging [#19628](https://codecov.io/gh/pandas-dev/pandas/pull/19628?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/569bc7a35c06ef8eb9a121ca983ba8951399a124?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `n/a`.

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

```diff
@@           Coverage Diff           @@
##           master   #19628   +/-   ##
=======================================
  Coverage   91.58%   91.58%           
=======================================
  Files         150      150           
  Lines       48806    48806           
=======================================
  Hits        44701    44701           
  Misses       4105     4105
```

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


------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/19628?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/19628?src=pr&el=footer). Last update [569bc7a...14b8120](https://codecov.io/gh/pandas-dev/pandas/pull/19628?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

I updated the fix and found the real issue (edited in my description above). 
Replaced fix with the use of `tz_convert_utc_to_tzlocal`, added `datetime_tz_utc` fixture, Also I am not sure what test I should have added to `pandas/tests/scalar/test_timezones.py` since the issue is with `DatetimeIndex.__iter__`
All green
thanks @mroeschke 

FYI looking to move tz to be fixtures (e.g. the strings 'UTC', 'Asia/Tokyo') etc....across the test codebase, IOW to have a 'tz' fixture (prob need several slightly different ones)

cc @jbrockmendel