Skip to content

Commit 845ff97

Browse files
committed
COMPAT: compat for dateutil 2.5.0 and differing dayfirst=True & yearfirst=True
closes #12730 closes #12731
1 parent 5870731 commit 845ff97

File tree

1 file changed

+51
-13
lines changed

1 file changed

+51
-13
lines changed

pandas/tseries/tests/test_tslib.py

+51-13
Original file line numberDiff line numberDiff line change
@@ -589,23 +589,62 @@ def test_parsers_quarter_invalid(self):
589589
self.assertRaises(ValueError, tools.parse_time_string, case)
590590

591591
def test_parsers_dayfirst_yearfirst(self):
592+
593+
# https://github.com/dateutil/dateutil/issues/217
594+
# this issue was closed
595+
import dateutil
596+
is_compat_version = dateutil.__version__ >= LooseVersion('2.5.2')
597+
if is_compat_version:
598+
dayfirst_yearfirst1 = datetime.datetime(2010, 12, 11)
599+
dayfirst_yearfirst2 = datetime.datetime(2020, 12, 21)
600+
else:
601+
dayfirst_yearfirst1 = datetime.datetime(2010, 11, 12)
602+
dayfirst_yearfirst2 = datetime.datetime(2020, 12, 21)
603+
592604
# str : dayfirst, yearfirst, expected
593-
cases = {'10-11-12': [(False, False, datetime.datetime(2012, 10, 11)),
594-
(True, False, datetime.datetime(2012, 11, 10)),
595-
(False, True, datetime.datetime(2010, 11, 12)),
596-
(True, True, datetime.datetime(2010, 11, 12))],
597-
'20/12/21': [(False, False, datetime.datetime(2021, 12, 20)),
598-
(True, False, datetime.datetime(2021, 12, 20)),
599-
(False, True, datetime.datetime(2020, 12, 21)),
600-
(True, True, datetime.datetime(2020, 12, 21))]}
605+
cases = {'10-11-12': [(False, False, False,
606+
datetime.datetime(2012, 10, 11)),
607+
(True, False, False,
608+
datetime.datetime(2012, 11, 10)),
609+
(False, True, False,
610+
datetime.datetime(2010, 11, 12)),
611+
(True, True, False, dayfirst_yearfirst1)],
612+
'20/12/21': [(False, False, False,
613+
datetime.datetime(2021, 12, 20)),
614+
(True, False, False,
615+
datetime.datetime(2021, 12, 20)),
616+
(False, True, False,
617+
datetime.datetime(2020, 12, 21)),
618+
(True, True, True, dayfirst_yearfirst2)]}
601619

602620
tm._skip_if_no_dateutil()
603621
from dateutil.parser import parse
604622
for date_str, values in compat.iteritems(cases):
605-
for dayfirst, yearfirst, expected in values:
606-
result1, _, _ = tools.parse_time_string(date_str,
607-
dayfirst=dayfirst,
608-
yearfirst=yearfirst)
623+
for dayfirst, yearfirst, is_compat, expected in values:
624+
625+
f = lambda x: tools.parse_time_string(x,
626+
dayfirst=dayfirst,
627+
yearfirst=yearfirst)
628+
629+
# we now have an invalid parse
630+
if is_compat and is_compat_version:
631+
self.assertRaises(tslib.DateParseError, f, date_str)
632+
633+
def f(date_str):
634+
return to_datetime(date_str, dayfirst=dayfirst,
635+
yearfirst=yearfirst)
636+
637+
self.assertRaises(ValueError, f, date_str)
638+
639+
def f(date_str):
640+
return DatetimeIndex([date_str], dayfirst=dayfirst,
641+
yearfirst=yearfirst)[0]
642+
643+
self.assertRaises(ValueError, f, date_str)
644+
645+
continue
646+
647+
result1, _, _ = f(date_str)
609648

610649
result2 = to_datetime(date_str, dayfirst=dayfirst,
611650
yearfirst=yearfirst)
@@ -614,7 +653,6 @@ def test_parsers_dayfirst_yearfirst(self):
614653
yearfirst=yearfirst)[0]
615654

616655
# Timestamp doesn't support dayfirst and yearfirst
617-
618656
self.assertEqual(result1, expected)
619657
self.assertEqual(result2, expected)
620658
self.assertEqual(result3, expected)

0 commit comments

Comments
 (0)