2015-10-29 41 views
5

我解析Python 2.7中的一些日期時間字符串,使用datetime.strptime。我想假定一個日期早於現在。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假設681968,因爲這將是在常見的用法?

或者我應該只是解析字符串並手動插入1920(適當時)?

回答

3

這很容易在事後修復:

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

謝謝! 'timedelta'不接受'年份'參數,所以我用'dt - = relativedelta(年= 100)'。所需的導入是從'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