将日期字符串转换为YYYYMMDD

2024-04-25 01:59:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多日期字符串在这个表单中:

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])

很有效,但我相信有更好的方法。。。


Tags: 字符串format表单datetimeparsedmarchpart
3条回答

尝试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')

在Python3.7中,可以使用isoformat()

>>> from datetime import datetime
>>> datetime.today().date().isoformat().replace("-", "")
'20190220'

你几乎可以用^{} and ^{} from the ^{} module的组合来实现这一点。

我们遇到的问题是,内置格式支持像30 November 2010这样的日期,但不支持30th November 2010。所以在下面的例子中,我用a regular expression substitution去掉了有问题的字符。(正则表达式使用一个look behind来查看“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'

相关问题 更多 >