代码之家  ›  专栏  ›  技术社区  ›  Alexander Artemenko

如何解析ISO 8601格式的日期?[副本]

  •  509
  • Alexander Artemenko  · 技术社区  · 17 年前

    我需要解析 RFC 3339 "2008-09-03T20:56:35.450686Z" 进入Python的 datetime 类型

    我找到了 strptime

    最好的方法是什么?

    24 回复  |  直到 4 年前
        1
  •  1
  •   Michael Dorner Satyanarayana    5 年前

    isoparse 作用于 python dateutil

    python-dateutil dateutil.parser.isoparse 不仅要解析RFC3339日期时间字符串(如问题中的一个),还要解析另一个 ISO 8601 不符合RFC 3339的日期和时间字符串(例如没有UTC偏移量的字符串,或仅表示日期的字符串)。

    >>> import dateutil.parser
    >>> dateutil.parser.isoparse('2008-09-03T20:56:35.450686Z') # RFC 3339 format
    datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc())
    >>> dateutil.parser.isoparse('2008-09-03T20:56:35.450686') # ISO 8601 extended format
    datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
    >>> dateutil.parser.isoparse('20080903T205635.450686') # ISO 8601 basic format
    datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
    >>> dateutil.parser.isoparse('20080903') # ISO 8601 basic format, date only
    datetime.datetime(2008, 9, 3, 0, 0)
    

    这个 python dateutil 包也有 dateutil.parser.parse

    datetime.datetime.fromisoformat

    datutil.parser.isoparse 是完整的ISO-8601格式解析器,但 fromisoformat 故意 . 请参阅后一个函数的文档以了解此警告。(见 this answer ).