【问题标题】:Is there a way to convert multiple date formats into datetime python有没有办法将多种日期格式转换为日期时间 python
【发布时间】:2016-08-06 07:02:05
【问题描述】:

有没有一种简单的方法可以将多种日期格式转换为 python 中的日期时间对象?最终,这些将被插入到类型为 DATE 的 MySQL 数据库中。

我可能收到的数据类型示例:

2008 年 8 月 2 日

04-02-2007

2014 年 5 月

转换我希望这些是:

2008-08-02

2007-04-02

2014-05-00

有没有一种简单的方法可以做到这一点,还是我必须对每个场景进行硬编码?

【问题讨论】:

    标签: python mysql datetime


    【解决方案1】:

    使用第三方dateutil库:

    >>> from dateutil import parser
    >>> parser.parse("August 2, 2008")
    datetime.datetime(2008, 8, 2, 0, 0)
    >>> parser.parse("04-02-2007")
    datetime.datetime(2007, 4, 2, 0, 0)
    >>> parser.parse("May 2014")
    datetime.datetime(2014, 5, 6, 0, 0)
    

    转换为所需格式:

    >>> parser.parse("August 2, 2008").strftime('%Y-%m-%d')
    '2008-08-02'
    >>> parser.parse("04-02-2007").strftime('%Y-%m-%d')
    '2007-04-02'
    >>> parser.parse("May 2014").strftime('%Y-%m-%d')
    '2014-05-06'
    

    你可以用 pip 安装它:

    pip install python-dateutil
    

    另请看:

    >>> parser.parse("May 2014")
    datetime.datetime(2014, 5, 6, 0, 0)
    >>> # As you wanted day to be 0 and that is not valid
    ...
    >>> datetime.datetime(2014, 5, 0, 0, 0)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
    >>> # Workaround:
    ...
    >>> from datetime import datetime
    >>> datedefault = datetime.now().replace(day=1, hour=0, minute=0, second=0, microsecond=0)
    >>> parser.parse("May 2014",default=datedefault).strftime('%Y-%m-%d')
    '2014-05-01'
    

    如果日期字符串中没有指定日期,也没有指定默认值,那么它将采用当前日期。由于今天是06 Aug 2016,所以在"May 2014"的答案的第一部分将日期替换为0

    【讨论】:

    • 非常感谢!只是想确认一下:为什么 2014 年 5 月会被解析为以 6 日为日期?
    【解决方案2】:

    您可能还想结帐dateparser

    >>> import dateparser
    >>> dates = ['August 2, 2008', '04-02-2007', 'May 2014']
    >>> [dateparser.parse(d, settings={'PREFER_DAY_OF_MONTH': 'first'}).strftime('%Y-%m-%d') for d in dates]
    ['2008-08-02', '2007-04-02', '2014-05-01']
    

    另外,您可以指定用缺失的日期(例如 2014 年 5 月)填充日期,以使用该月的第一天、最后一天或当前日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 2021-09-22
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多