代码之家  ›  专栏  ›  技术社区  ›  Jonathan Freed

ValueError时间数据“2016年3月11日星期五15:59:57 EST”与格式“%a%b%d%H:%M:%S%Z%Y”不匹配

  •  5
  • Jonathan Freed  · 技术社区  · 8 年前

    我试图简单地从以下日期创建日期时间对象:“2016年3月11日星期五15:59:57 EST”,格式为:“%a%b%d%H:%M:%S%Z%Y”。

    这是密码。

    from datetime import datetime
    date = datetime.strptime('Fri Mar 11 15:59:57 EST 2016', '%a %b %d %H:%M:%S %Z %Y')
    

    ValueError: time data 'Fri Mar 11 15:59:57 EST 2016' does not match format '%a %b %d %H:%M:%S %Z %Y'
    

    也许我的格式字符串遗漏了一些明显的错误,但我已经反复检查过了。任何帮助都将不胜感激,谢谢。

    编辑以反映评论/问题以了解更多信息:

    我使用的Python版本是2.7.6。

    在Ubuntu 14.04上使用“locale”命令,我得到了以下信息:

    $ locale
    LANG=en_US.UTF-8
    LANGUAGE=
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=
    
    1 回复  |  直到 8 年前
        1
  •  11
  •   Nazim Kerimbekov Gusev Slava    5 年前

    对于%Z说明符, strptime 仅识别“UTC”、“GMT”和任何 time.tzname (因此,它是否识别“EST”将取决于您计算机的时区)。这是 issue 22377 .

    请参见:

    解析包含人类可读时区的时区的最佳选择仍然是使用第三方 python-dateutil 库:

    import dateutil
    date = dateutil.parse('Fri Mar 11 15:59:57 EST 2016')
    

    如果无法安装python dateutil,可以去掉时区并手动解析,例如使用字典查找。