python datetime strptime 通配符

21 投票
5 回答
22029 浏览
提问于 2025-04-15 13:31

我想把这些日期转换成日期时间对象:

  • 2008年12月12日
  • 2009年1月1日

下面的代码可以处理第一个日期:

datetime.strptime("December 12th, 2008", "%B %dth, %Y")

但是对于第二个日期就不行了,因为日期后面有个后缀('st')。所以,strptime里有没有什么不为人知的通配符?或者有没有更好的方法呢?

5 个回答

8

strptime这个函数有点复杂,因为它是依赖于底层的C语言库来实现的,所以在不同的平台上可能会有一些细节上的差异。看起来没有办法完全匹配你需要的字符。不过,你可以先对数据进行清理:

# Remove ordinal suffixes from numbers.
date_in = re.sub(r"(st|nd|rd|th),", ",", date_in)
# Parse the pure date.
date = datetime.strptime(date_in, "%B %d, %Y")
10

你需要安装 Gustavo Niemeyer 的 python_dateutil 库——安装完成后,

>>> from dateutil import parser
>>> parser.parse('December 12th, 2008')
datetime.datetime(2008, 12, 12, 0, 0)
>>> parser.parse('January 1st, 2009')
datetime.datetime(2009, 1, 1, 0, 0)
>>> 
18

可以试试使用 dateutil.parser 这个模块。

import dateutil.parser
date1 = dateutil.parser.parse("December 12th, 2008")
date2 = dateutil.parser.parse("January 1st, 2009")

更多的文档可以在这里找到: http://labix.org/python-dateutil

撰写回答