【发布时间】:2014-01-25 16:37:14
【问题描述】:
我想从如下字符串中提取日期:
15/Nov/2013
05/Jan/2014
然后像这样重新格式化
15/11/2013
05/01/2014
是否有现成的功能(已经“知道”月份:1 月、2 月等)?
【问题讨论】:
标签: python string parsing date datetime
我想从如下字符串中提取日期:
15/Nov/2013
05/Jan/2014
然后像这样重新格式化
15/11/2013
05/01/2014
是否有现成的功能(已经“知道”月份:1 月、2 月等)?
【问题讨论】:
标签: python string parsing date datetime
如果您的语言环境是英文,那么标准的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'
【讨论】:
这样做:
>>> import datetime
>>> datetime.datetime.strptime('15/Nov/2013', '%d/%b/%Y').strftime('%d/%m/%Y')
'15/11/2013'
正如 Martijn Pieters 所指出的,您的语言环境应该是英语(例如 en_US)才能正常工作。如果你没有做任何改变语言环境的事情,那可能是一些英语的味道。
【讨论】:
我倾向于使用dateutil.parser 将字符串转换为python 日期时间对象。到目前为止,它已经成功地处理了我想做的每一次转换。将其放入日期时间对象后,您可以轻松地将其转换为您选择的字符串格式。
>>> 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'
【讨论】: