@@ -472,16 +472,15 @@ cpdef bint _does_string_look_like_datetime(str py_string):
472
472
return True
473
473
474
474
475
- cdef object _parse_dateabbr_string(object date_string, datetime default,
475
+ cdef object _parse_dateabbr_string(str date_string, datetime default,
476
476
str freq = None ):
477
+ # special handling for possibilities eg, 2Q2005, 2Q05, 2005Q1, 05Q1
477
478
cdef:
478
479
datetime ret
479
480
# year initialized to prevent compiler warnings
480
481
int year = - 1 , quarter = - 1 , month
481
482
Py_ssize_t date_len
482
-
483
- # special handling for possibilities eg, 2Q2005, 2Q05, 2005Q1, 05Q1
484
- assert isinstance (date_string, str )
483
+ const char * buf
485
484
486
485
if date_string in nat_strings:
487
486
return NaT, " "
@@ -498,10 +497,11 @@ cdef object _parse_dateabbr_string(object date_string, datetime default,
498
497
pass
499
498
500
499
if 4 <= date_len <= 7 :
500
+ buf = get_c_string_buf_and_size(date_string, & date_len)
501
501
try :
502
502
i = date_string.index(" Q" , 1 , 6 )
503
503
if i == 1 :
504
- quarter = int (date_string[0 ])
504
+ quarter = _parse_1digit(buf) # i.e. int(date_string[0])
505
505
if date_len == 4 or (date_len == 5
506
506
and date_string[i + 1 ] == " -" ):
507
507
# r'(\d)Q-?(\d\d)')
@@ -516,15 +516,17 @@ cdef object _parse_dateabbr_string(object date_string, datetime default,
516
516
# r'(\d\d)-?Q(\d)'
517
517
if date_len == 4 or (date_len == 5
518
518
and date_string[i - 1 ] == " -" ):
519
- quarter = int (date_string[- 1 ])
519
+ # i.e. quarter = int(date_string[-1])
520
+ quarter = _parse_1digit(buf + date_len - 1 )
520
521
year = 2000 + int (date_string[:2 ])
521
522
else :
522
523
raise ValueError
523
524
elif i == 4 or i == 5 :
524
525
if date_len == 6 or (date_len == 7
525
526
and date_string[i - 1 ] == " -" ):
526
527
# r'(\d\d\d\d)-?Q(\d)'
527
- quarter = int (date_string[- 1 ])
528
+ # i.e. quarter = int(date_string[-1])
529
+ quarter = _parse_1digit(buf + date_len - 1 )
528
530
year = int (date_string[:4 ])
529
531
else :
530
532
raise ValueError
0 commit comments