Skip to content

Commit 30a6b0e

Browse files
Jonathan EliashivJonathan Eliashiv
Jonathan Eliashiv
authored and
Jonathan Eliashiv
committed
fix utc comprehension
1 parent 1461da0 commit 30a6b0e

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

pandas/_libs/src/ujson/python/date_conversions.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ char *PyDateTimeToIso(PyObject *obj, NPY_DATETIMEUNIT base,
9696

9797
if ((tzinfo != NULL) && (tzinfo != Py_None)){
9898
tzoffset = get_tzoffset_from_pytzinfo(tzinfo, &dts);
99+
if (tzoffset == 0){
100+
tzoffset = -1;
101+
}
99102
}
100103
}
101104

pandas/tests/io/json/test_pandas.py

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,8 +1185,6 @@ def test_sparse(self):
11851185
"ts",
11861186
[
11871187
Timestamp("2013-01-10 05:00:00Z"),
1188-
Timestamp("2013-01-10 00:00:00", tz="US/Eastern"),
1189-
Timestamp("2013-01-10 00:00:00-0500"),
11901188
],
11911189
)
11921190
def test_tz_is_utc(self, ts):
@@ -1198,12 +1196,26 @@ def test_tz_is_utc(self, ts):
11981196
dt = ts.to_pydatetime()
11991197
assert dumps(dt, iso_dates=True) == exp
12001198

1199+
@pytest.mark.parametrize(
1200+
"ts",
1201+
[
1202+
Timestamp("2013-01-10 00:00:00", tz="US/Eastern"),
1203+
Timestamp("2013-01-10 00:00:00-0500"),
1204+
],
1205+
)
1206+
def test_tz_is_localized(self, ts):
1207+
from pandas.io.json import dumps
1208+
1209+
exp = '"2013-01-10T00:00:00.000-05:00"'
1210+
1211+
assert dumps(ts, iso_dates=True) == exp
1212+
dt = ts.to_pydatetime()
1213+
assert dumps(dt, iso_dates=True) == exp
1214+
12011215
@pytest.mark.parametrize(
12021216
"tz_range",
12031217
[
1204-
pd.date_range("2013-01-01 05:00:00Z", periods=2),
1205-
pd.date_range("2013-01-01 00:00:00", periods=2, tz="US/Eastern"),
1206-
pd.date_range("2013-01-01 00:00:00-0500", periods=2),
1218+
pd.date_range("2013-01-01 05:00:00Z", periods=2)
12071219
],
12081220
)
12091221
def test_tz_range_is_utc(self, tz_range):
@@ -1222,6 +1234,30 @@ def test_tz_range_is_utc(self, tz_range):
12221234
df = DataFrame({"DT": dti})
12231235
result = dumps(df, iso_dates=True)
12241236
assert result == dfexp
1237+
1238+
@pytest.mark.parametrize(
1239+
"tz_range",
1240+
[
1241+
pd.date_range("2013-01-01 00:00:00", periods=2, tz='US/Eastern'),
1242+
pd.date_range("2013-01-01 00:00:00-0500", periods=2)
1243+
],
1244+
)
1245+
def test_tz_range_is_local(self, tz_range):
1246+
from pandas.io.json import dumps
1247+
1248+
exp = '["2013-01-01T05:00:00.000Z","2013-01-02T05:00:00.000Z"]'
1249+
dfexp = (
1250+
'{"DT":{'
1251+
'"0":"2013-01-01T00:00:00.000-05:00",'
1252+
'"1":"2013-01-02T00:00:00.000-05:00"}}'
1253+
)
1254+
1255+
assert dumps(tz_range, iso_dates=True) == exp
1256+
dti = DatetimeIndex(tz_range)
1257+
assert dumps(dti, iso_dates=True) == exp
1258+
df = DataFrame({"DT": dti})
1259+
result = dumps(df, iso_dates=True)
1260+
assert result == dfexp
12251261

12261262
def test_read_inline_jsonl(self):
12271263
# GH9180

pandas/tests/io/json/test_ujson.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,8 @@ def test_encode_time_conversion_basic(self, test):
391391

392392
def test_encode_time_conversion_pytz(self):
393393
# see gh-11473: to_json segfaults with timezone-aware datetimes
394-
test = datetime.datetime(2021, 5, 25, 10, 12, 15, 343243, pytz.timezone('US/Eastern'))
394+
test = datetime.datetime(2021, 5, 25, 10, 12, 15, 343243, \
395+
pytz.timezone('US/Eastern'))
395396
output = ujson.encode(test, iso_dates=True, date_unit='us')
396397
expected = f'"{test.isoformat()}"'
397398
assert expected == output

0 commit comments

Comments
 (0)