【问题标题】:Python 2.7 how parse a date with format 2014-05-01 18:10:38-04:00 [duplicate]Python 2.7 如何解析格式为 2014-05-01 18:10:38-04:00 的日期 [重复]
【发布时间】:2014-06-19 05:11:04
【问题描述】:

我正在尝试解析这个日期时间字符串,但还没有成功,我怎样才能得到它?

d = '2014-05-01 18:10:38-04:00'
datetime.datetime.strptime(d,'%Y-%m-%d %H:%M:%S-%Z')

ValueError: time data '2014-05-01 18:10:38-04:00' does not match format '%Y-%m-%d %H:%M:%S%Z'

【问题讨论】:

  • 查看文档,%Z 仅匹配以下内容:(空)、UTC、EST、CST
  • %z 应该匹配:(空)、+0000、-0400、+1030。当我尝试 strptime (“错误指令,格式”)时,除了 %z 对我不起作用。我在文档中看不到任何处理包含冒号的 TZ 格式的内容。
  • @jonrsharpe 字符串格式不一样..
  • 从这个答案中,stackoverflow.com/questions/2609259/… 似乎“strptime 并不总是支持 %z”。

标签: python python-2.7


【解决方案1】:

你也可以使用python-dateutil模块:

>>> from dateutil import parser
>>> d = '2014-05-01 18:10:38-04:00'
>>> parser.parse(d)
datetime.datetime(2014, 5, 1, 18, 10, 38, tzinfo=tzoffset(None, -14400))

另见:

【讨论】:

    【解决方案2】:

    您是否尝试过 iso8601 库?首先安装它:https://pypi.python.org/pypi/iso8601/

    然后:

        import iso8601
        mydate = '2014-05-01 18:10:38-04:00'
        iso8601.parse_date(mydate)
    
    Out[3]: datetime.datetime(2014, 5, 1, 18, 10, 38, tzinfo=<FixedOffset '-04:00'>)
    

    【讨论】:

    • %timeit iso8601.parse_date(mydate) 是 100000 个循环,最好的 3 个:每个循环 12.3 us VS 使用 python-dateutil 每个循环 71.9 us,谢谢
    • @Goku 哦,太好了,iso8601 快了很多,谢谢。
    猜你喜欢
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2023-03-07
    • 1970-01-01
    • 2016-03-09
    • 2019-06-15
    相关资源
    最近更新 更多