2010-04-09 12 views
43

Data questa stringa: "Fri, 09 Apr 2010 14:10:50 +0000" come si converte in un oggetto datetime?Conversione di stringa con offset UTC in un oggetto datetime

Dopo aver fatto qualche lettura mi sento come questo dovrebbe funzionare, ma non è così ...

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

Va notato che questo funziona senza problemi:

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

Ma io Sono bloccato con "Fri, 09 Apr 2010 14:10:50 +0000". Preferirei convertirlo esattamente senza cambiarlo (o affettarlo) in alcun modo.

+0

['dateutil'] (https://pypi.python.org/pypi/python-dateutil/)' .parser.parse' può farlo in Python 2. 'pip install dateutil', e dovrebbe funzionare da python 3.2 in poi. – n611x007

risposta

39

Sembra che non sempre lo strptime supporti %z. Python sembra chiamare semplicemente la funzione C, e strptime non supporta %z sulla tua piattaforma.

Nota: da Python 3.2 in poi funzionerà sempre.

+2

Picchiami! Dai un'occhiata a: http://bugs.python.org/issue6641 – AlG

+0

Grazie a tutti e due, ho provato questo con python2.5/2.6/3.1 sulla mia macchina vincente e python2.6/3.1 sul mio * nix, tutto fruttato lo stesso fallimento. Mi chiedo se% z funzioni effettivamente per chiunque, non sto indovinando. – Gussi

+3

non è corretto. 'strptime()' è implementato in puro Python. A differenza di 'strftime()'; si comporta allo stesso modo su tutte le piattaforme. Non funzionerà su Python 2 su qualsiasi piattaforma. – jfs

Problemi correlati