我想从字符串中提取日期:
15/Nov/2013
05/Jan/2014
并像这样重新格式化
15/11/2013
05/01/2014
是否有现成的功能(已经“知道”月份:1月,2月等)?
答案 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'