将日期字符串转换为YYYYMMDD

mar*_*ank 9 python

我有这种形式的一堆日期字符串: -

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)


Dav*_*ebb 5

你可以几乎组合做到这一点strptime,并strptimedatetime模块.

我们遇到的问题是内置格式支持日期,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)