我需要将以下格式的日期转换为不同的格式以便显示。但在此之前,我试图将字符串中的日期转换为时间对象,但不能这样做。
>>> 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,那么这里的问题是什么。请帮我找。
Python版本:2.4.3
答案 0 :(得分:1)
来自Python文档。 https://docs.python.org/2/library/time.html#time.strptime
对%Z指令的支持基于tzname中包含的值以及日光是否为真。因此,它是特定于平台的,除了识别始终已知的UTC和GMT(并且被认为是非夏令时时区)。
基本上说time.strptime()
只能识别time.tzname
希望这有帮助
答案 1 :(得分:0)
%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