@@ -589,23 +589,62 @@ def test_parsers_quarter_invalid(self):
589
589
self .assertRaises (ValueError , tools .parse_time_string , case )
590
590
591
591
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
+
592
604
# 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 )]}
601
619
602
620
tm ._skip_if_no_dateutil ()
603
621
from dateutil .parser import parse
604
622
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 )
609
648
610
649
result2 = to_datetime (date_str , dayfirst = dayfirst ,
611
650
yearfirst = yearfirst )
@@ -614,7 +653,6 @@ def test_parsers_dayfirst_yearfirst(self):
614
653
yearfirst = yearfirst )[0 ]
615
654
616
655
# Timestamp doesn't support dayfirst and yearfirst
617
-
618
656
self .assertEqual (result1 , expected )
619
657
self .assertEqual (result2 , expected )
620
658
self .assertEqual (result3 , expected )
0 commit comments