在Python中解析这个日期:2010年11月5日
今天我在处理日期的解析和格式化时遇到了麻烦。
如果有人能把这个日期格式转换成 datetime.date
或 datetime.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)