将日期字符串转换为YYYYMMDD
我有一堆日期字符串,格式是这样的:-
30th November 2009
31st March 2010
30th September 2010
我想把它们变成这样:-
YYYYMMDD
现在我正在这样做:-
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])
这样做是有效的,但我相信还有更好的方法...
3 个回答
3
在Python 3.7中,你可以使用isoformat()这个方法。
>>> from datetime import datetime
>>> datetime.today().date().isoformat().replace("-", "")
'20190220'
6
你几乎可以通过结合使用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'
16
试试这个叫做 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')
输出结果:
20091130
20100331
20100930
或者如果你想用标准的 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')