在Python中解析这个日期:2010年11月5日

3 投票
3 回答
1456 浏览
提问于 2025-04-16 02:39

今天我在处理日期的解析和格式化时遇到了麻烦。

如果有人能把这个日期格式转换成 datetime.datedatetime.datetime(我不是太挑剔,但我更喜欢 .date),那就太好了:

2010年11月5日

3 个回答

5

如果这个序号是固定的,那么:

datetime.strptime(s, '%dth %B %Y')

否则:

date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')

或者像~unutbu说的,可以使用dateutil库来处理 :)

10

很遗憾,strptime 这个函数没有可以用来“跳过序数后缀”的格式字符。所以,我会先用一点正则表达式(RE)来跳过这些后缀,然后再解析处理后的“干净”字符串。也就是说:

>>> import re
>>> import datetime
>>> ordn = re.compile(r'(?<=\d)(st|nd|rd|th)\b')
>>> def parse(s):
...   cleans = ordn.sub('', s)
...   dt = datetime.datetime.strptime(cleans, '%d %B %Y')
...   return dt.date()
... 
>>> parse('5th November 2010')
datetime.date(2010, 11, 5)

你喜欢使用 date 还是 datetime 都没问题,当然,这就是 datetime 对象的 .date() 方法的用途;-)。

如果你需要进行很多“模糊”的日期解析(或者其他一些复杂的日期相关操作;-),第三方扩展库比如 dateutil 会非常有用。

17

使用 dateutil 库:

In [2]: import dateutil.parser as dparser

In [3]: date = dparser.parse('5th November 2010')

In [4]: date
Out[4]: datetime.datetime(2010, 11, 5, 0, 0)

撰写回答