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

Oli*_*Oli 3 python date-formatting python-datetime

我今天的日期解析和格式化时间很糟糕.

对于那些能够将这种日期格式解析为datetime.datedatetime.datetime(我不是太挑剔但我更喜欢.date)的人来说:

5th November 2010

unu*_*tbu 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)
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 10

不幸的是,strptime没有"跳过序数后缀"的格式字符 - 所以,我先跳过一点RE,然后解析生成的"clear"字符串.即:

>>> 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)
Run Code Online (Sandbox Code Playgroud)

你对datevs的偏好datetime当然不是问题,那就是对象的.date()方法datetime是什么;-).

如果您需要进行大量"模糊"日期解析(或其他与花哨日期相关的东西;-),那么像dateutil这样的第三方扩展会非常有用.


Man*_*dan 5

如果序数是常数,那么:

datetime.strptime(s, '%dth %B %Y')
Run Code Online (Sandbox Code Playgroud)

其他:

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

或者像~unutbu说使用dateutil :)