我试图简单地从以下日期创建一个日期时间对象:“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'
也许我遗漏了格式字符串中明显错误的地方,但我已经检查了一遍又一遍。任何帮助都将不胜感激,谢谢。
编辑以反映评论/问题以获取更多信息:
我使用的 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格式说明符需要 Python 可以识别和处理的时区缩写。但是,在某些系统或版本上,Pythondatetime.strptime可能无法正确处理时区缩写('EST'就您的情况而言)。
%Z
datetime.strptime
'EST'
在您的情况下,日期'Fri Mar 11 15:59:57 EST 2016'使用'EST'时区缩写,这在 Python 2.7.6 中并不总是能识别strptime。
'Fri Mar 11 15:59:57 EST 2016'
strptime
'UTC'
from datetime import datetime # Replace 'EST' with a recognized timezone (like 'UTC' or 'GMT') date_str = 'Fri Mar 11 15:59:57 EST 2016'.replace('EST', 'UTC') # Now parse the string date = datetime.strptime(date_str, '%a %b %d %H:%M:%S %Z %Y') print(date)
'EST'``'UTC'``'UTC'
pytz
from datetime import datetime import pytz # Parse the date without timezone date_str = 'Fri Mar 11 15:59:57 2016' date = datetime.strptime(date_str, '%a %b %d %H:%M:%S %Y') # Add the timezone using pytz est = pytz.timezone('US/Eastern') date_est = est.localize(date) print(date_est)
datetime这种方法通过将简单对象本地化到东部时区来确保正确处理时区。
datetime