ValueError 时间数据 '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'

我试图从以下日期简单地创建一个日期时间对象:'Fri Mar 11 15:59:57 EST 2016' 使用格式:'%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。

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

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

编辑以反映 comments/questions 以获取更多信息:

我使用的 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=

对于 %Z 说明符,strptime 仅识别 "UTC"、"GMT" 以及 time.tzname 中的任何内容(因此它是否识别 "EST" 将取决于在您计算机的时区上)。这是issue 22377

参见:

  • Python strptime() and timezones?

  • Parsing date/time string with timezone abbreviated name in Python?

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

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

如果您无法安装 python-dateutil,您可以删除时区并手动解析它,例如使用字典查找。