REF: implement utc_val_to_local_val
State: closed

Some overlap with #46803.  I'm pretty happy with the perf impact, as the cases that are slowed down are the ones that are currently the fastest.

```
asv continuous -E virtualenv -f 1.01 a8968bfa 874d1ed4 --record-samples --append-samples -b tslibs.normalize -b tslibs.tslib.TimeIntsToPydatetime -b tslibs.period.TimeDT64ArrToPeriodArr -b tslibs.resolution
[...]
       before           after         ratio
     [a8968bfa]       [874d1ed4]
     <enh-nano-tzconversion>                 
+        89.6±3μs          122±2μs     1.36  tslibs.normalize.Normalize.time_is_date_array_normalized(10000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      8.93±0.5ms       12.1±0.6ms     1.35  tslibs.normalize.Normalize.time_is_date_array_normalized(1000000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+        85.0±4μs          109±4μs     1.28  tslibs.normalize.Normalize.time_is_date_array_normalized(10000, datetime.timezone(datetime.timedelta(seconds=3600)))
+      8.40±0.5ms       10.5±0.7ms     1.25  tslibs.normalize.Normalize.time_is_date_array_normalized(1000000, datetime.timezone(datetime.timedelta(seconds=3600)))
+        74.1±4μs         85.5±3μs     1.15  tslibs.normalize.Normalize.time_is_date_array_normalized(10000, None)
+     2.07±0.09μs      2.35±0.06μs     1.14  tslibs.normalize.Normalize.time_is_date_array_normalized(100, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+     1.24±0.06μs      1.41±0.03μs     1.14  tslibs.normalize.Normalize.time_is_date_array_normalized(100, datetime.timezone.utc)
+        75.4±5μs         85.1±1μs     1.13  tslibs.normalize.Normalize.time_is_date_array_normalized(10000, datetime.timezone.utc)
+      7.74±0.7ms       8.69±0.6ms     1.12  tslibs.normalize.Normalize.time_is_date_array_normalized(1000000, None)
+      7.65±0.3ms       8.57±0.2ms     1.12  tslibs.normalize.Normalize.time_is_date_array_normalized(1000000, datetime.timezone.utc)
+     1.32±0.08μs      1.46±0.05μs     1.11  tslibs.normalize.Normalize.time_is_date_array_normalized(100, None)
+         104±5μs          115±5μs     1.11  tslibs.normalize.Normalize.time_normalize_i8_timestamps(10000, datetime.timezone(datetime.timedelta(seconds=3600)))
+        244±10μs          270±3μs     1.10  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 3000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         116±4μs          128±2μs     1.10  tslibs.normalize.Normalize.time_normalize_i8_timestamps(10000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+        23.9±1ms       26.3±0.3ms     1.10  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 3000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      11.3±0.6ms       12.4±0.3ms     1.10  tslibs.normalize.Normalize.time_normalize_i8_timestamps(1000000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      9.66±0.7ms       10.6±0.3ms     1.10  tslibs.normalize.Normalize.time_normalize_i8_timestamps(1000000, datetime.timezone(datetime.timedelta(seconds=3600)))
+      8.11±0.6ms       8.90±0.3ms     1.10  tslibs.normalize.Normalize.time_normalize_i8_timestamps(1000000, None)
+        85.7±2μs        93.9±10μs     1.10  tslibs.normalize.Normalize.time_normalize_i8_timestamps(10000, datetime.timezone.utc)
+         203±4μs          222±2μs     1.09  tslibs.resolution.TimeResolution.time_get_resolution('m', 10000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      8.20±0.5ms       8.96±0.3ms     1.09  tslibs.normalize.Normalize.time_normalize_i8_timestamps(1000000, datetime.timezone.utc)
+      5.11±0.1μs       5.49±0.1μs     1.08  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 12000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         279±8μs          300±3μs     1.07  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 12000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+        26.1±2ms       28.0±0.5ms     1.07  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 8000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         267±9μs         287±10μs     1.07  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 8000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      23.8±0.7ms       25.5±0.8ms     1.07  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 2000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         270±8μs          288±3μs     1.07  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 9000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+        27.7±1ms       29.5±0.4ms     1.07  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 4006, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         284±8μs          302±6μs     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 4006, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+        26.2±2ms         27.9±1ms     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 9000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         250±8μs          265±3μs     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 2011, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+        27.4±1ms       29.1±0.8ms     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 12000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         246±9μs          261±3μs     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 1000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      23.7±0.7ms         25.1±1ms     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 1000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      22.4±0.8ms       23.7±0.3ms     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 2000, None)
+      26.2±0.8ms         27.7±1ms     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 7000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+        25.9±1ms       27.3±0.3ms     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 6000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         249±9μs         263±20μs     1.06  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 6000, None)
+        87.8±4μs         92.6±1μs     1.06  tslibs.normalize.Normalize.time_normalize_i8_timestamps(10000, None)
+        246±10μs          259±3μs     1.05  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 1011, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+        246±10μs          259±5μs     1.05  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 2000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         236±8μs          247±3μs     1.05  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 2011, None)
+      24.0±0.7ms       25.2±0.3ms     1.05  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 1011, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         250±3μs          262±3μs     1.05  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 6000, datetime.timezone.utc)
+         230±6μs          241±7μs     1.05  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 2000, datetime.timezone.utc)
+         231±7μs          242±4μs     1.05  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 2000, None)
+      22.6±0.9ms       23.6±0.2ms     1.05  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 2000, datetime.timezone.utc)
+     4.80±0.08μs       5.01±0.3μs     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 1000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         262±4μs          274±3μs     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 11000, None)
+        262±10μs          273±4μs     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 8000, datetime.timezone(datetime.timedelta(seconds=3600)))
+      23.2±0.8ms       24.2±0.5ms     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 2011, None)
+      3.70±0.1μs      3.86±0.04μs     1.04  tslibs.resolution.TimeResolution.time_get_resolution('D', 100, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      24.7±0.7ms       25.8±0.4ms     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 7000, datetime.timezone.utc)
+         260±4μs          271±3μs     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 9000, None)
+      24.8±0.6ms       25.8±0.2ms     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 7000, None)
+        26.4±1ms       27.4±0.3ms     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 12000, datetime.timezone(datetime.timedelta(seconds=3600)))
+         253±6μs          263±3μs     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 7000, None)
+      24.6±0.7ms       25.5±0.2ms     1.04  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 6000, None)
+        32.3±1ms       33.4±0.4ms     1.03  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 5000, datetime.timezone.utc)
+      23.3±0.6ms       24.1±0.2ms     1.03  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 2011, datetime.timezone.utc)
+     2.43±0.06μs      2.51±0.04μs     1.03  tslibs.normalize.Normalize.time_normalize_i8_timestamps(100, datetime.timezone.utc)
+         346±6μs          357±5μs     1.03  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 5000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+      25.4±0.5ms       26.2±0.3ms     1.03  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 8000, datetime.timezone(datetime.timedelta(seconds=3600)))
+      5.07±0.2μs       5.22±0.5μs     1.03  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 8000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
+         266±7μs          274±5μs     1.03  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 9000, datetime.timezone(datetime.timedelta(seconds=3600)))
-        55.9±4ms       55.2±0.3ms     0.99  tslibs.resolution.TimeResolution.time_get_resolution('m', 1000000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        33.0±4μs       32.6±0.3μs     0.99  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 100, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-        32.1±3μs       31.6±0.2μs     0.99  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 100, datetime.timezone.utc)
-        535±30μs          526±7μs     0.98  tslibs.resolution.TimeResolution.time_get_resolution('D', 10000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      24.1±0.6ms       23.8±0.2ms     0.98  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 2011, datetime.timezone(datetime.timedelta(seconds=3600)))
-      7.05±0.8μs      6.94±0.08μs     0.98  tslibs.resolution.TimeResolution.time_get_resolution('s', 100, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        38.3±3μs       37.7±0.7μs     0.98  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 1, tzlocal())
-      3.47±0.3ms      3.41±0.06ms     0.98  tslibs.resolution.TimeResolution.time_get_resolution('ns', 100, tzlocal())
-      4.04±0.3ms      3.97±0.07ms     0.98  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 10000, datetime.timezone.utc)
-        42.1±5μs       41.4±0.4μs     0.98  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 100, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      1.81±0.1μs      1.78±0.09μs     0.98  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 11000, None)
-        29.1±3μs       28.5±0.3μs     0.98  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 100, datetime.timezone(datetime.timedelta(seconds=3600)))
-      3.99±0.3ms      3.91±0.03ms     0.98  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 10000, None)
-      2.42±0.2ms      2.37±0.04ms     0.98  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 10000, None)
-     2.13±0.06μs      2.08±0.05μs     0.98  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 4000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        23.4±1ms       22.8±0.3ms     0.98  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 1000, datetime.timezone(datetime.timedelta(seconds=3600)))
-        345±10ms          337±4ms     0.98  tslibs.resolution.TimeResolution.time_get_resolution('h', 10000, tzlocal())
-        35.7±2μs       34.9±0.3μs     0.98  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 100, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        569±30μs          555±7μs     0.98  tslibs.resolution.TimeResolution.time_get_resolution('m', 10000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      7.64±0.6μs       7.45±0.2μs     0.98  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 4006, datetime.timezone(datetime.timedelta(seconds=3600)))
-        23.5±1ms       22.9±0.2ms     0.97  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 1011, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.40±0.06μs      1.36±0.02μs     0.97  tslibs.resolution.TimeResolution.time_get_resolution('m', 0, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        577±60μs          562±9μs     0.97  tslibs.resolution.TimeResolution.time_get_resolution('s', 10000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        27.7±3ms       27.0±0.4ms     0.97  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 4000, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.09±0.07μs      1.06±0.01μs     0.97  tslibs.resolution.TimeResolution.time_get_resolution('us', 1, None)
-        351±10ms          341±4ms     0.97  tslibs.resolution.TimeResolution.time_get_resolution('us', 10000, tzlocal())
-        53.7±4ms       52.2±0.5ms     0.97  tslibs.resolution.TimeResolution.time_get_resolution('D', 1000000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      1.63±0.1μs      1.59±0.02μs     0.97  tslibs.resolution.TimeResolution.time_get_resolution('ns', 0, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      1.56±0.2μs      1.52±0.03μs     0.97  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 0, tzlocal())
-      1.84±0.2μs      1.79±0.03μs     0.97  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 1, None)
-     2.36±0.05μs      2.29±0.04μs     0.97  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 2000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      8.33±0.2μs       8.08±0.2μs     0.97  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 5000, datetime.timezone(datetime.timedelta(seconds=3600)))
-         352±9ms          341±4ms     0.97  tslibs.resolution.TimeResolution.time_get_resolution('m', 10000, tzlocal())
-        349±20ms          338±6ms     0.97  tslibs.resolution.TimeResolution.time_get_resolution('s', 10000, tzlocal())
-     2.14±0.06μs      2.07±0.04μs     0.97  tslibs.normalize.Normalize.time_normalize_i8_timestamps(1, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-     1.01±0.09μs         976±20ns     0.97  tslibs.resolution.TimeResolution.time_get_resolution('us', 1, datetime.timezone.utc)
-        212±20μs          205±2μs     0.97  tslibs.resolution.TimeResolution.time_get_resolution('s', 10000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.67±0.1μs      1.62±0.01μs     0.97  tslibs.resolution.TimeResolution.time_get_resolution('s', 1, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-         254±5μs          245±3μs     0.97  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(10000, 3000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.31±0.3μs      2.23±0.05μs     0.97  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 1, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      1.82±0.2μs      1.76±0.04μs     0.97  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 6000, tzlocal())
-        37.3±3μs       36.0±0.4μs     0.97  tslibs.resolution.TimeResolution.time_get_resolution('s', 1, tzlocal())
-      1.64±0.1μs      1.59±0.03μs     0.97  tslibs.resolution.TimeResolution.time_get_resolution('s', 0, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      1.53±0.2μs      1.48±0.03μs     0.96  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 0, None)
-      7.51±0.1μs       7.24±0.2μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 6000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      7.40±0.6μs      7.13±0.07μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 3000, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.72±0.04μs      1.65±0.03μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 7000, datetime.timezone.utc)
-      6.30±0.6μs      6.07±0.09μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('s', 100, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.51±0.05μs      1.46±0.04μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('m', 1, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      1.39±0.1μs      1.34±0.03μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('ns', 0, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      2.52±0.3μs      2.43±0.05μs     0.96  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 1, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-     1.64±0.06μs      1.57±0.01μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('m', 0, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      6.26±0.5μs      6.02±0.05μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('ns', 100, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.73±0.05μs      1.66±0.04μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 9000, datetime.timezone.utc)
-      1.74±0.2μs      1.67±0.03μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 3000, datetime.timezone.utc)
-     1.70±0.05μs      1.63±0.02μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 6000, datetime.timezone.utc)
-      4.93±0.2μs       4.73±0.2μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 8000, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.84±0.05μs      1.76±0.04μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 6000, None)
-      4.99±0.1μs       4.79±0.1μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 6000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      6.48±0.5μs       6.22±0.1μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('h', 100, datetime.timezone(datetime.timedelta(seconds=3600)))
-     2.15±0.06μs      2.06±0.03μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 8000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-     2.37±0.03μs      2.28±0.07μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 5000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      4.91±0.1μs       4.71±0.1μs     0.96  tslibs.normalize.Normalize.time_normalize_i8_timestamps(1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.44±0.2μs      2.34±0.09μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 12000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      1.53±0.1μs      1.47±0.02μs     0.96  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 0, None)
-      1.50±0.2μs      1.44±0.03μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('s', 1, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      6.28±0.1μs       6.01±0.1μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('D', 100, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.40±0.2μs      2.29±0.03μs     0.96  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 7000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      2.18±0.2μs      2.09±0.06μs     0.96  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 0, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-     1.43±0.04μs      1.36±0.03μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('h', 0, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      4.95±0.2μs      4.73±0.08μs     0.96  tslibs.normalize.Normalize.time_normalize_i8_timestamps(0, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.50±0.06μs      1.44±0.04μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('h', 1, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      4.21±0.1μs      4.02±0.08μs     0.96  tslibs.resolution.TimeResolution.time_get_resolution('m', 0, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.49±0.1μs      1.42±0.03μs     0.95  tslibs.resolution.TimeResolution.time_get_resolution('ns', 1, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      1.56±0.2μs      1.49±0.02μs     0.95  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 0, tzlocal())
-        50.7±5μs       48.3±0.8μs     0.95  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 100, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      1.72±0.1μs      1.64±0.04μs     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 1000, datetime.timezone.utc)
-      4.98±0.7μs       4.75±0.1μs     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 1011, datetime.timezone(datetime.timedelta(seconds=3600)))
-        585±40μs          557±5μs     0.95  tslibs.resolution.TimeResolution.time_get_resolution('h', 10000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        24.6±2ms         23.4±2ms     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1000000, 3000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.84±0.1μs      1.75±0.04μs     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 4000, tzlocal())
-      1.71±0.1μs      1.62±0.04μs     0.95  tslibs.resolution.TimeResolution.time_get_resolution('ns', 1, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-     1.41±0.04μs      1.34±0.01μs     0.95  tslibs.resolution.TimeResolution.time_get_resolution('D', 0, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      4.91±0.2μs       4.67±0.1μs     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 8000, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.11±0.03μs      1.06±0.02μs     0.95  tslibs.normalize.Normalize.time_is_date_array_normalized(0, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      5.16±0.6μs      4.90±0.08μs     0.95  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      5.04±0.5μs       4.78±0.1μs     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 10000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.46±0.1μs      1.38±0.03μs     0.95  tslibs.resolution.TimeResolution.time_get_resolution('us', 0, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        38.0±4μs       36.0±0.9μs     0.95  tslibs.resolution.TimeResolution.time_get_resolution('ns', 1, tzlocal())
-      1.50±0.2μs      1.42±0.02μs     0.95  tslibs.resolution.TimeResolution.time_get_resolution('us', 1, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      1.89±0.2μs      1.80±0.04μs     0.95  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 0, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      2.19±0.1μs      2.07±0.03μs     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 1000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-     5.00±0.09μs       4.73±0.2μs     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 9000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      7.78±0.7μs       7.35±0.2μs     0.95  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 7000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      4.95±0.1μs       4.68±0.1μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 4000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      7.48±0.5μs       7.06±0.1μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 2000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.47±0.1μs      1.39±0.02μs     0.94  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 0, datetime.timezone.utc)
-      3.51±0.2μs       3.31±0.1μs     0.94  tslibs.normalize.Normalize.time_is_date_array_normalized(0, datetime.timezone(datetime.timedelta(seconds=3600)))
-      5.01±0.1μs       4.72±0.2μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 11000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      4.80±0.6μs      4.52±0.04μs     0.94  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 0, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.78±0.2μs      1.67±0.03μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 2000, datetime.timezone.utc)
-      5.02±0.5μs       4.71±0.1μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 1000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.77±0.1μs      1.66±0.03μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 10000, datetime.timezone.utc)
-     2.21±0.09μs      2.08±0.05μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 1000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      5.01±0.5μs       4.70±0.1μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 2000, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.75±0.05μs      1.64±0.04μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 8000, datetime.timezone.utc)
-      4.98±0.5μs      4.66±0.06μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 12000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      4.21±0.1μs      3.94±0.09μs     0.94  tslibs.resolution.TimeResolution.time_get_resolution('s', 0, datetime.timezone(datetime.timedelta(seconds=3600)))
-      5.11±0.4μs      4.79±0.06μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 3000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.48±0.2μs       2.33±0.1μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 2011, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      4.30±0.2μs       4.02±0.1μs     0.94  tslibs.resolution.TimeResolution.time_get_resolution('h', 1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.00±0.1μs      1.87±0.03μs     0.94  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 0, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      2.54±0.2μs      2.37±0.06μs     0.94  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 1, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      5.09±0.6μs       4.76±0.1μs     0.94  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 4006, datetime.timezone(datetime.timedelta(seconds=3600)))
-      4.25±0.3μs      3.97±0.07μs     0.93  tslibs.resolution.TimeResolution.time_get_resolution('ns', 0, datetime.timezone(datetime.timedelta(seconds=3600)))
-     1.44±0.08μs      1.34±0.02μs     0.93  tslibs.resolution.TimeResolution.time_get_resolution('s', 0, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      5.09±0.2μs      4.75±0.07μs     0.93  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 5000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.91±0.1μs      1.78±0.04μs     0.93  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 1, datetime.timezone.utc)
-      2.19±0.1μs      2.04±0.06μs     0.93  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 0, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      6.52±0.6μs      6.06±0.08μs     0.93  tslibs.resolution.TimeResolution.time_get_resolution('us', 100, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.41±0.1μs      2.24±0.04μs     0.93  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 1000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-        915±30ns         850±10ns     0.93  tslibs.normalize.Normalize.time_is_date_array_normalized(1, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      1.72±0.1μs      1.60±0.01μs     0.93  tslibs.resolution.TimeResolution.time_get_resolution('us', 1, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      5.05±0.1μs       4.68±0.2μs     0.93  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 6000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.88±0.1μs      1.74±0.02μs     0.93  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 7000, tzlocal())
-     1.66±0.09μs      1.54±0.03μs     0.92  tslibs.resolution.TimeResolution.time_get_resolution('h', 0, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      4.36±0.6μs      4.03±0.08μs     0.92  tslibs.resolution.TimeResolution.time_get_resolution('ns', 1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      4.83±0.5μs       4.46±0.1μs     0.92  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 0, datetime.timezone(datetime.timedelta(seconds=3600)))
-      5.10±0.1μs      4.70±0.06μs     0.92  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 1011, datetime.timezone(datetime.timedelta(seconds=3600)))
-      1.76±0.2μs      1.62±0.03μs     0.92  tslibs.resolution.TimeResolution.time_get_resolution('h', 1, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      4.27±0.2μs      3.93±0.09μs     0.92  tslibs.resolution.TimeResolution.time_get_resolution('D', 0, datetime.timezone(datetime.timedelta(seconds=3600)))
-      4.47±0.8μs       4.11±0.1μs     0.92  tslibs.resolution.TimeResolution.time_get_resolution('us', 1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      5.38±0.4μs      4.95±0.05μs     0.92  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('timestamp', 1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.54±0.3μs      2.33±0.06μs     0.92  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 1011, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      1.91±0.2μs      1.75±0.05μs     0.92  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 1011, tzlocal())
-      4.38±0.4μs       4.01±0.1μs     0.91  tslibs.resolution.TimeResolution.time_get_resolution('s', 1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.54±0.2μs      2.32±0.09μs     0.91  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 9000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-      1.58±0.1μs      1.44±0.02μs     0.91  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('date', 0, None)
-      5.13±0.2μs       4.66±0.1μs     0.91  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 1000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      5.20±0.4μs      4.71±0.09μs     0.91  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 2011, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.29±0.2μs      2.07±0.04μs     0.90  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 2011, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-      4.36±0.2μs      3.94±0.07μs     0.90  tslibs.resolution.TimeResolution.time_get_resolution('m', 1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      4.25±0.1μs       3.84±0.1μs     0.90  tslibs.resolution.TimeResolution.time_get_resolution('h', 0, datetime.timezone(datetime.timedelta(seconds=3600)))
-      4.30±0.4μs      3.87±0.05μs     0.90  tslibs.resolution.TimeResolution.time_get_resolution('us', 0, datetime.timezone(datetime.timedelta(seconds=3600)))
-      3.67±0.2μs       3.30±0.1μs     0.90  tslibs.normalize.Normalize.time_is_date_array_normalized(1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      5.33±0.5μs       4.78±0.1μs     0.90  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('time', 1, datetime.timezone(datetime.timedelta(seconds=3600)))
-      3.45±0.3ms      3.09±0.04ms     0.90  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 10000, tzfile('/usr/share/zoneinfo/Asia/Tokyo'))
-        40.2±3μs         36.0±1μs     0.89  tslibs.resolution.TimeResolution.time_get_resolution('m', 1, tzlocal())
-      7.90±0.8μs       6.97±0.1μs     0.88  tslibs.resolution.TimeResolution.time_get_resolution('m', 100, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        233±20μs          206±2μs     0.88  tslibs.resolution.TimeResolution.time_get_resolution('us', 10000, datetime.timezone(datetime.timedelta(seconds=3600)))
-        22.4±2ms       19.7±0.2ms     0.88  tslibs.resolution.TimeResolution.time_get_resolution('us', 1000000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      5.33±0.5μs       4.65±0.5μs     0.87  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(0, 10000, datetime.timezone(datetime.timedelta(seconds=3600)))
-      2.39±0.2μs      2.07±0.08μs     0.87  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(1, 3000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
-        398±40ms          345±2ms     0.87  tslibs.tslib.TimeIntsToPydatetime.time_ints_to_pydatetime('datetime', 10000, tzlocal())
-      8.41±0.7μs       7.22±0.6μs     0.86  tslibs.period.TimeDT64ArrToPeriodArr.time_dt64arr_to_periodarr(100, 2011, datetime.timezone(datetime.timedelta(seconds=3600)))
-      7.20±0.4μs       6.16±0.1μs     0.86  tslibs.resolution.TimeResolution.time_get_resolution('m', 100, datetime.timezone(datetime.timedelta(seconds=3600)))
-        240±20μs          205±2μs     0.85  tslibs.resolution.TimeResolution.time_get_resolution('ns', 10000, datetime.timezone(datetime.timedelta(seconds=3600)))
-        674±60μs          543±8μs     0.81  tslibs.resolution.TimeResolution.time_get_resolution('ns', 10000, <DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>)
```

Labels:
name: Refactor
description: Internal refactoring of code
name: Timezones
description: Timezone data dtype

Comments:
thanks @jbrockmendel I believe have merged all of the non-nano stuff....