从字符串中提取日期(“05 / Jan / 2014”)

时间:2014-01-07 20:19:43

标签: python string parsing date datetime

我想从字符串中提取日期:

15/Nov/2013
05/Jan/2014

并像这样重新格式化

15/11/2013
05/01/2014

是否有现成的功能(已经“知道”月份:1月,2月等)?

3 个答案:

答案 0 :(得分:5)

如果您的语言环境是英语,那么标准datetime模块将为您解析月份缩写:

import datetime

date = datetime.datetime.strptime(inputvalue, '%d/%b/%Y').date()

C(英文月份名称)是默认语言环境,因此这应该适用于未明确设置Python语言环境的任何位置。只要您不在任何地方拨打locale.setlocale()locale.resetlocale(),就可以指望上述内容正常工作。

将这些格式化为不同的格式是微不足道的:

date.strftime('%d/%m/%Y')

演示:

>>> datetime.datetime.strptime('15/Nov/2013', '%d/%b/%Y').date()
datetime.date(2013, 11, 15)
>>> datetime.datetime.strptime('05/Jan/2014', '%d/%b/%Y').date()
datetime.date(2014, 1, 5)
>>> datetime.datetime.strptime('15/Nov/2013', '%d/%b/%Y').date().strftime('%d/%m/%Y')
'15/11/2013'
>>> datetime.datetime.strptime('05/Jan/2014', '%d/%b/%Y').date().strftime('%d/%m/%Y')
'05/01/2014'

答案 1 :(得分:2)

这样做:

>>> import datetime
>>> datetime.datetime.strptime('15/Nov/2013', '%d/%b/%Y').strftime('%d/%m/%Y')
'15/11/2013'

正如Martijn Pieters所说,你的语言环境应该是英语(例如en_US)才能使用。如果你没有做任何改变语言环境的事情,那么可能会有一些英语风格。

答案 2 :(得分:1)

我倾向于使用dateutil.parser将字符串转换为python datetime对象。到目前为止,它已设法处理我想要做的每一次转换。在datetime对象中获得它后,您可以轻松地将其转换为您选择的字符串格式。

>>> import dateutil.parser
>>> dateutil.parser.parse('15/Nov/2013').strftime("%d/%m/%Y")
'15/11/2013'

该功能同时能够处理其他格式,例如YYYY-mm-DD没有任何改变。

>>> dateutil.parser.parse('2013-11-15').strftime("%d/%m/%Y")
'15/11/2013'