我需要将以下格式的日期转换为不同的格式以用于显示目的。但在此之前,我正在尝试将字符串中的日期转换为时间对象,但无法这样做。
>>> time.strptime("Thu Mar 13 23:15:13 2014 EDT", '%a %b %d %H:%M:%S %Y %Z')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib64/python2.4/_strptime.py", line 293, in strptime
raise ValueError("time data did not match format: data=%s fmt=%s" %
ValueError: time data did not match format: data=Thu Mar 13 23:15:13 2014 EDT fmt=%a %b %d %H:%M:%S %Y %Z
进行了反复试验,是"%Z"导致了问题,下面工作正常(仅删除了%Z)
>>> time.strptime("Thu Mar 13 23:15:13 2014", '%a %b %d %H:%M:%S %Y')
(2014, 3, 13, 23, 15, 13, 3, 72, -1)
Python wiki (https://docs.python.org/2/library/time.html) 说时区说明符是 %Z,那么这里有什么问题。请帮我找到。
蟒蛇版本:2.4.3
来自 Python 文档。 https://docs.python.org/2/library/time.html#time.strptime
对 %Z 指令的支持基于 tzname 中包含的值以及日光是否为真。因此,它是特定于平台的,除了识别始终已知的 UTC 和 GMT(并且被认为是非夏令时时区)。
这基本上是说time.strptime()
只会识别time.tzname
中列出的时区
希望这有帮助
%z
仅适用于Python 3.x中的数字时区,以下是Python 2.x的修复程序:
而不是使用:
datetime.strptime(t,'%Y-%m-%dT%H:%M %z')
使用timedelta
来说明时区,如下所示:
from datetime import datetime,timedelta
def dt_parse(t):
ret = datetime.strptime(t[0:16],'%Y-%m-%dT%H:%M')
if t[18]=='+':
ret+=timedelta(hours=int(t[19:22]),minutes=int(t[23:]))
elif t[18]=='-':
ret-=timedelta(hours=int(t[19:22]),minutes=int(t[23:]))
return ret