字符串到日期 - 格式字符串问题

时间:2014-04-03 10:56:15

标签: python datetime python-2.4

我需要将以下格式的日期转换为不同的格式以便显示。但在此之前,我试图将字符串中的日期转换为时间对象,但不能这样做。

>>> 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

2 个答案:

答案 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