我有约会
In [1]: a = "Sun 10 May 2015 13:34:36 -0700"
当我尝试使用转换它时strptime
,它给出了错误。
In [3]: datetime.strptime(a, "%a %d %b %Y %H:%M:%S %Z"
...: )
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-973ef1c6daca> in <module>()
----> 1 datetime.strptime(a, "%a %d %b %Y %H:%M:%S %Z"
2 )
/usr/lib/python2.7/_strptime.pyc in _strptime(data_string, format)
323 if not found:
324 raise ValueError("time data %r does not match format %r" %
--> 325 (data_string, format))
326 if len(data_string) != found.end():
327 raise ValueError("unconverted data remains: %s" %
ValueError: time data 'Sun 10 May 2015 13:34:36 -0700' does not match format '%a %d %b %Y %H:%M:%S %Z'
In [6]: datetime.strptime(a, "%a %d %b %Y %H:%M:%S %z")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-e4870e34edda> in <module>()
----> 1 datetime.strptime(a, "%a %d %b %Y %H:%M:%S %z")
/usr/lib/python2.7/_strptime.pyc in _strptime(data_string, format)
315 del err
316 raise ValueError("'%s' is a bad directive in format '%s'" %
--> 317 (bad_directive, format))
318 # IndexError only occurs when the format string is "%"
319 except IndexError:
ValueError: 'z' is a bad directive in format '%a %d %b %Y %H:%M:%S %z'
根据文档,正确的格式为%z
,但我可能会缺少某些部分。
您的格式字符串是正确的,并且在Python 3.3中可以正常工作:
>>> a = "Sun 10 May 2015 13:34:36 -0700"
>>> datetime.strptime(a, "%a %d %b %Y %H:%M:%S %z")
datetime.datetime(2015, 5, 10, 13, 34, 36, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200)))
它确实给出了Python 2.7中的错误。
与不同strftime()
,它是通过调用libc函数strptime()
来实现的,它是在Python库中实现的。在这里您可以看到Python 2.7中使用的版本不支持该z
格式。另一方面,这里是Python 3.3的版本,它支持该版本(我认为这是在3.2左右添加的)。
因此,基本上,您有两种选择:
z
。strptime()
然后手动解析第二部分)。在Python库中查看如何完成此操作可能会有所帮助。我试图解析它以返回一个“感知”对象,但是它有些复杂。
>>> a = "Sun 10 May 2015 13:34:36 -0700"
>>> time, tz = a.rsplit(' ', 1)
>>> d = datetime.strptime(time, '%a %d %b %Y %H:%M:%S')
datetime.datetime(2015, 5, 10, 13, 34, 36)
现在,我必须致电d.replace(tzinfo=…tz…)
替换时区,但问题是我无法获得实例,tzinfo
因为仅知道UTC的偏移量不足以标识时区。
在Python 3.2中,有一个特殊的timezone
类,它是tzinfo
表示仅由其偏移量定义的“假”时区的子类。因此,有两种方法可以进行:
timezone
从Python 3反向移植(基本上是复制和粘贴)该类,并在解析器中使用它。返回一个“天真的”对象:
>>> d + timedelta(hours=int(tz[1:]) * (1 if tz.startswith('-') else -1))
datetime.datetime(2015, 6, 8, 17, 34, 36)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句