我有这种形式的一堆日期字符串: -
30th November 2009
31st March 2010
30th September 2010
Run Code Online (Sandbox Code Playgroud)
我希望他们这样: -
YYYYMMDD
Run Code Online (Sandbox Code Playgroud)
目前我这样做: -
parsed_date = "30th November 2009"
part = parsed_date.split(' ')
daymonth = part[0].strip(string.ascii_letters)
mytime = daymonth+" "+part[1]+" "+part[2]
time_format = "%d %B %Y"
cdate = time.strptime(mytime, time_format)
newdate = str(cdate[0])+str(cdate[1])+str(cdate[2])
Run Code Online (Sandbox Code Playgroud)
它有效,但我确信有更好的方法......
eum*_*iro 14
试试dateutil:
from dateutil import parser
dates = ['30th November 2009', '31st March 2010', '30th September 2010']
for date in dates:
print parser.parse(date).strftime('%Y%m%d')
Run Code Online (Sandbox Code Playgroud)
输出:
20091130
20100331
20100930
Run Code Online (Sandbox Code Playgroud)
或者如果你想使用标准datetime模块:
from datetime import datetime
dates = ['30th November 2009', '31st March 2010', '30th September 2010']
for date in dates:
part = date.split()
print datetime.strptime('%s %s %s' % (part[0][:-2]), part[1], part[2]), '%d %B %Y').strftime('%Y%m%d')
Run Code Online (Sandbox Code Playgroud)
你可以几乎组合做到这一点strptime,并strptime从datetime模块.
我们遇到的问题是内置格式支持日期,30 November 2010但不支持日期30th November 2010.因此,在下面的示例中,我使用正则表达式替换来去除问题字符.(正则表达式使用后视来查看"st","nd","rd"或"th"是否以数字开头,如果是,则将其替换为空字符串,从而将其从字符串中删除. )
>>> import re
>>> from datetime import datetime
>>> mydate = "30th November 2009"
>>> mydate = re.sub("(?<=\d)(st|nd|rd|th)","",mydate)
>>> mydate
'30 November 2009'
>>> mydatetime = datetime.strptime(mydate,"%d %B %Y")
>>> mydatetime
datetime.datetime(2009, 11, 30, 0, 0)
>>> mydatetime.strftime("%Y%M%d")
'20090030'
Run Code Online (Sandbox Code Playgroud)