将日期字符串转换为YYYYMMDD

12 投票
3 回答
25821 浏览
提问于 2025-04-16 22:52

我有一堆日期字符串,格式是这样的:-

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

你几乎可以通过结合使用strptimestrptime来自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')

撰写回答