2015-10-29 4 views
5

datetime.strptimeを使用して、Python 2.7で日時文字列を解析しています。私は日付が今より前であると仮定したいと思う。世紀のないPython strptimeの解析年:今年より前に仮定しますか?

しかし、の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(除く)まで、[OK]を動作するはずです。 more details on arithmetic with calendar yearsについてはこちらをご覧ください。

関連する問題