我今天在日期解析和格式化方面遇到了麻烦。
datetime.date
可以将此日期格式解析为or的人的要点datetime.datetime
(我不太挑剔,但我更喜欢.date
):
5th November 2010
我今天在日期解析和格式化方面遇到了麻烦。
datetime.date
可以将此日期格式解析为or的人的要点datetime.datetime
(我不太挑剔,但我更喜欢.date
):
5th November 2010
使用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)
不幸的是,strptime
没有“跳过序数后缀”的格式字符——所以,我会先跳过,用一点 RE,然后解析生成的“清除”字符串。IE:
>>> 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
您对vs的偏好datetime
当然没有问题,这就是对象.date()
方法的datetime
用途;-)。
顺便说一句,如果您需要进行大量“模糊”日期解析(或其他花哨的与日期相关的东西;-),像dateutil这样的第三方扩展会很有用。
如果序数是常数,那么:
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 :)