Skip to content

Commit 7970069

Browse files
authored
CLN: tz_convert is always from UTC (#35104)
1 parent 10024cd commit 7970069

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

pandas/_libs/tslibs/tzconversion.pyx

+3-2
Original file line numberDiff line numberDiff line change
@@ -388,8 +388,9 @@ def tz_convert(int64_t[:] vals, tzinfo tz1, tzinfo tz2):
388388
bint to_utc = is_utc(tz2)
389389
tzinfo tz
390390

391-
# See GH#17734 We should always be converting either from UTC or to UTC
392-
assert is_utc(tz1) or to_utc
391+
# See GH#17734 We should always be converting from UTC; otherwise
392+
# should use tz_localize_to_utc.
393+
assert is_utc(tz1)
393394

394395
if len(vals) == 0:
395396
return np.array([], dtype=np.int64)

pandas/tests/tslibs/test_conversion.py

+22-11
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,47 @@ def f(x):
2020
tm.assert_numpy_array_equal(result, expected)
2121

2222

23-
def _compare_local_to_utc(tz_didx, utc_didx):
23+
def _compare_local_to_utc(tz_didx, naive_didx):
24+
# Check that tz_localize behaves the same vectorized and pointwise.
2425
def f(x):
2526
return tzconversion.tz_convert_single(x, tz_didx.tz, UTC)
2627

27-
result = tzconversion.tz_convert(utc_didx.asi8, tz_didx.tz, UTC)
28-
expected = np.vectorize(f)(utc_didx.asi8)
28+
err1 = err2 = None
29+
try:
30+
result = tzconversion.tz_localize_to_utc(naive_didx.asi8, tz_didx.tz)
31+
err1 = None
32+
except Exception as err:
33+
err1 = err
2934

30-
tm.assert_numpy_array_equal(result, expected)
35+
try:
36+
expected = naive_didx.map(lambda x: x.tz_localize(tz_didx.tz)).asi8
37+
except Exception as err:
38+
err2 = err
39+
40+
if err1 is not None:
41+
assert type(err1) == type(err2)
42+
else:
43+
assert err2 is None
44+
tm.assert_numpy_array_equal(result, expected)
3145

3246

3347
def test_tz_convert_single_matches_tz_convert_hourly(tz_aware_fixture):
3448
tz = tz_aware_fixture
3549
tz_didx = date_range("2014-03-01", "2015-01-10", freq="H", tz=tz)
36-
utc_didx = date_range("2014-03-01", "2015-01-10", freq="H")
50+
naive_didx = date_range("2014-03-01", "2015-01-10", freq="H")
3751

3852
_compare_utc_to_local(tz_didx)
39-
_compare_local_to_utc(tz_didx, utc_didx)
53+
_compare_local_to_utc(tz_didx, naive_didx)
4054

4155

4256
@pytest.mark.parametrize("freq", ["D", "A"])
4357
def test_tz_convert_single_matches_tz_convert(tz_aware_fixture, freq):
4458
tz = tz_aware_fixture
4559
tz_didx = date_range("2000-01-01", "2020-01-01", freq=freq, tz=tz)
46-
utc_didx = date_range("2000-01-01", "2020-01-01", freq=freq)
60+
naive_didx = date_range("2000-01-01", "2020-01-01", freq=freq)
4761

4862
_compare_utc_to_local(tz_didx)
49-
_compare_local_to_utc(tz_didx, utc_didx)
63+
_compare_local_to_utc(tz_didx, naive_didx)
5064

5165

5266
@pytest.mark.parametrize(
@@ -57,9 +71,6 @@ def test_tz_convert_single_matches_tz_convert(tz_aware_fixture, freq):
5771
],
5872
)
5973
def test_tz_convert_corner(arr):
60-
result = tzconversion.tz_convert(arr, timezones.maybe_get_tz("US/Eastern"), UTC)
61-
tm.assert_numpy_array_equal(result, arr)
62-
6374
result = tzconversion.tz_convert(arr, UTC, timezones.maybe_get_tz("Asia/Tokyo"))
6475
tm.assert_numpy_array_equal(result, arr)
6576

0 commit comments

Comments
 (0)