2010-10-25 30 views
9

vorrei convertire questa stringa in un oggetto datetime:Converti in oggetto datetime

Wed Oct 20 16:35:44 +0000 2010 

C'è un modo semplice per fare questo? O devo scrivere una RE per analizzare gli elementi, convertire Oct a 10 e così via?

EDIT: strptime è ottimo. Tuttavia, con

datetime.strptime(date_str, "%a %b %d %H:%M:%S %z %Y") 

ottengo

ValueError: 'z' is a bad directive in format '%a %b %d %H:%M:%S %z %Y' 

anche se% z sembra essere corretta.

EDIT2: Il tag% z sembra non essere supportato. Vedi http://bugs.python.org/issue6641. Mi sono aggirato usando un oggetto timedelta per modificare l'ora in modo appropriato.

risposta

2

A seconda della provenienza della stringa, è possibile utilizzare datetime.strptime per analizzarlo. L'unico problema è che il tempo si basa su alcune cose specifiche della piattaforma, quindi se quella stringa deve essere in grado di provenire da altri sistemi arbitrari e tutti i giorni e i mesi non sono definiti esattamente nello stesso modo (giugno o giugno), puoi avere problemi

+0

non è sicuro se toglie il fuso orario –

28

No RE necessario. Prova questo:

from dateutil import parser 

yourDate = parser.parse(yourString) 

per "Mer 20 Ott 0000 16:35:44 2010" restituisce datetime.datetime(2010, 10, 20, 16, 35, 44, tzinfo=tzutc())

+2

dateutil non è nella libreria standard. È però PyPI, quindi funziona 'pip install python-dateutil '. La licenza è PSF. –

+0

Eccellente! apt-get install python-dateutil – Andy

2

Sono abbastanza sicuro che siete in grado di farlo usando datetime.strptime.

Dalla documentazione:

datetime.strptime (DATE_STRING, formato)

ritorno datetime corrispondente al DATE_STRING, analizzato secondo il formato . Questo è equivalente a datetime (* (time.strptime (date_string, format) [0: 6])). ValoreErrore viene generato se data_string e formato non possono essere analizzati da time.strptime() o se esso restituisce un valore che non è una tupla di tempo .