2012-04-12 72 views
1

將以下日期模式轉換爲Python中的datetime.date對象的最佳方法是什麼?使用strptime轉換日期()

1st April 
8th April 
15th April 
1st May 
+0

我覺得不雅的解決方案,如去除「st」,「nd」,「rd」和「th」後綴通過正則表達式,然後通過'strptime()'解析。任何人都有更好的想法? – 2012-04-12 18:21:14

回答

4

dateutil.parser將解析幾乎所有已知的日期格式:

from dateutil.parser import parse 
parse('8th April') 

要始終讓你在未來的日期:

from dateutil.parser import parse 
from datetime import datetime 

d = parse('8th April') 
if (d - datetime.now()).days <= 0: 
    d = datetime.date(d.year+1, d.month, d.day) 
+0

你可以設置'parse'方法來始終返回未來日期嗎?例如。如果是「4月1日」,它是否可以返回「01-04-2013」​​而不是「01-04-2012」? – 2012-04-12 18:39:14

+0

@JosvicZammit你可以在默認的kwarg中提供一個默認值的datetime實例:'parse('8th',default = datetime.date(2013,1,1))' – mensi 2012-04-12 18:43:46

+0

@mensi,我認爲默認值不是因爲問題更復雜而工作。 – 2012-04-12 18:50:34

0
from datetime import datetime 

val = val.replace('th', '').replace('st', '') 
d = datetime.strptime(val, '%d %B')