2015-10-29 3 views
5

Я разбираю некоторые строки datetime в Python 2.7, используя datetime.strptime. Я хочу предположить, что дата до этого.Python strptime parsing year without century: предположим до этого года?

Но strptime-х %y operator не делает это по умолчанию:

d = '10/12/68' 
n = datetime.strptime(d, '%d/%m/%y') 
print n 
2068-12-10 00:00:00 

Есть ли способ я могу получить Python предположить, что 68 является 1968, как это было бы в обиходе?

Или следует просто разобрать строку и вставить 19 или 20, если необходимо, вручную?

ответ

3

Это легко исправить постфактум:

from datetime import datetime, timedelta 
dt = datetime.strptime(...) 
if dt > datetime.now(): 
    dt -= timedelta(years=100) 
+1

Спасибо! 'timedelta' не принимает аргумент' years', поэтому я использовал 'dt - = relativedelta (years = 100)'. Требуемый импорт: 'from dateutil.relativedelta import relativedelta'. – Richard

+0

Или: 'timedelta (days = 365)', хотя это может быть не так безопасно из-за високосных лет .. –

0

Если вход находится в локальной временной зоне:

from datetime import date 

then = datetime.strptime('10/12/68', '%d/%m/%y').date() 
if date.today() <= then: # *then* must be in the past 
    then = then.replace(year=then.year - 100) 

Он должен работать нормально до 2100 (за исключением). См. Здесь more details on arithmetic with calendar years.

Смежные вопросы