【问题标题】:Extract date ("05/Jan/2014") from string从字符串中提取日期(“05/Jan/2014”)
【发布时间】: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


【解决方案1】:

如果您的语言环境是英文,那么标准的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'

【讨论】:

【解决方案2】:

这样做:

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

正如 Martijn Pieters 所指出的,您的语言环境应该是英语(例如 en_US)才能正常工作。如果你没有做任何改变语言环境的事情,那可能是一些英语的味道。

【讨论】:

    【解决方案3】:

    我倾向于使用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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2020-08-14
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多