Skip to content

Commit 005ee9a

Browse files
author
Alice Harpole
committed
DEPS: Added tz keywords to to_datetime, deprecated utc
closes pandas-dev#13712
1 parent 062f6f1 commit 005ee9a

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

pandas/core/tools/datetimes.py

+15-7
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
ABCDataFrame, ABCDateOffset)
2121
from pandas.core.dtypes.missing import notna
2222
from pandas.core import algorithms
23+
from pandas.util._decorators import deprecate_kwarg
2324

2425
import pandas.compat as compat
2526

@@ -181,10 +182,12 @@ def _guess_datetime_format_for_array(arr, **kwargs):
181182
if len(non_nan_elements):
182183
return _guess_datetime_format(arr[non_nan_elements[0]], **kwargs)
183184

184-
185+
@deprecate_kwarg(old_arg_name='utc', new_arg_name='tz',
186+
mapping={True: 'UTC'})
185187
def to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False,
186-
utc=None, box=True, format=None, exact=True,
187-
unit=None, infer_datetime_format=False, origin='unix'):
188+
box=True, format=None, exact=True,
189+
unit=None, infer_datetime_format=False, origin='unix',
190+
tz=None):
188191
"""
189192
Convert argument to datetime.
190193
@@ -221,8 +224,13 @@ def to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False,
221224
.. versionadded: 0.16.1
222225
223226
utc : boolean, default None
227+
.. deprecated
224228
Return UTC DatetimeIndex if True (converting any tz-aware
225229
datetime.datetime objects as well).
230+
tz : pytz.timezone or dateutil.tz.tzfile, default None
231+
Define the timezone.
232+
233+
.. versionadded
226234
box : boolean, default True
227235
228236
- If True returns a DatetimeIndex
@@ -343,8 +351,6 @@ def to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False,
343351
"""
344352
from pandas.core.indexes.datetimes import DatetimeIndex
345353

346-
tz = 'utc' if utc else None
347-
348354
def _convert_listlike(arg, box, format, name=None, tz=tz):
349355

350356
if isinstance(arg, (list, tuple)):
@@ -354,8 +360,6 @@ def _convert_listlike(arg, box, format, name=None, tz=tz):
354360
if is_datetime64tz_dtype(arg):
355361
if not isinstance(arg, DatetimeIndex):
356362
return DatetimeIndex(arg, tz=tz, name=name)
357-
if utc:
358-
arg = arg.tz_convert(None).tz_localize('UTC')
359363
return arg
360364

361365
elif is_datetime64_ns_dtype(arg):
@@ -431,6 +435,10 @@ def _convert_listlike(arg, box, format, name=None, tz=tz):
431435
result = arg
432436

433437
if result is None and (format is None or infer_datetime_format):
438+
if tz == 'utc' or tz == 'UTC':
439+
utc = True
440+
else:
441+
utc = False
434442
result = tslib.array_to_datetime(
435443
arg,
436444
errors=errors,

pandas/tests/indexes/datetimes/test_tools.py

+12
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,18 @@ def test_to_datetime_utc_is_true(self):
270270
expected = pd.DatetimeIndex(data=date_range)
271271
tm.assert_index_equal(result, expected)
272272

273+
def test_to_datetime_tz(self):
274+
# See gh-13712
275+
for tz in [None, 'US/Eastern', 'Asia/Tokyo', 'UTC']:
276+
start = pd.Timestamp('2014-01-01', tz=tz)
277+
end = pd.Timestamp('2014-01-03', tz=tz)
278+
date_range = pd.bdate_range(start, end)
279+
280+
result = pd.to_datetime(date_range, tz=tz)
281+
expected = pd.DatetimeIndex(data=date_range)
282+
tm.assert_index_equal(result, expected)
283+
assert result.tz == expected.tz
284+
273285
def test_to_datetime_tz_psycopg2(self):
274286

275287
# xref 8260

0 commit comments

Comments
 (0)