2010-04-09 26 views
43

Dada esta cadena: "Fri, 09 Apr 2010 14:10:50 +0000" ¿cómo se puede convertir a un objeto datetime?Conversión de cadena con desplazamiento UTC a un objeto datetime

Después de hacer un poco de lectura Siento que esto debería funcionar, pero no es así ...

>>> from datetime import datetime 
>>> 
>>> str = 'Fri, 09 Apr 2010 14:10:50 +0000' 
>>> fmt = '%a, %d %b %Y %H:%M:%S %z' 
>>> datetime.strptime(str, fmt) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.6/_strptime.py", line 317, in _strptime 
    (bad_directive, format)) 
ValueError: 'z' is a bad directive in format '%a, %d %b %Y %H:%M:%S %z' 

Debe tenerse en cuenta que esto funciona sin problemas:

>>> from datetime import datetime 
>>> 
>>> str = 'Fri, 09 Apr 2010 14:10:50' 
>>> fmt = '%a, %d %b %Y %H:%M:%S' 
>>> datetime.strptime(str, fmt) 
datetime.datetime(2010, 4, 9, 14, 10, 50) 

Pero Estoy atrapado con "Fri, 09 Apr 2010 14:10:50 +0000". Preferiría convertir exactamente eso sin cambiarlo (ni cortarlo) de ninguna manera.

+0

['dateutil'] (https://pypi.python.org/pypi/python-dateutil/)' .parser.parse' puede hacerlo en Python 2. 'pip install dateutil', y debería funcionar desde Python 3.2 en adelante. – n611x007

Respuesta

39

Parece que strptime no siempre es compatible con %z. Python parece llamar simplemente a la función C, y strptime no admite %z en su plataforma.

Nota: de Python 3.2 en adelante, siempre funcionará.

+2

¡Pásame! Visite: http://bugs.python.org/issue6641 – AlG

+0

Gracias a los dos, probé esto con python2.5/2.6/3.1 en mi máquina ganadora y python2.6/3.1 en mi * nix, todos cedieron el mismo fracaso Me pregunto si% z en realidad funciona para cualquier persona, supongo que no. – Gussi

+3

es incorrecto. 'strptime()' se implementa en Python puro. A diferencia de 'strftime()'; se comporta igual en todas las plataformas. No funcionará en Python 2 en ninguna plataforma. – jfs

Cuestiones relacionadas