2009-10-14 10 views

Respuesta

30

In [1]: import rfc822  # This only works for python 2 series 

In [2]: rfc822.parsedate_tz('Sun, 09 Mar 1997 13:45:00 -0500') 
Out[2]: (1997, 3, 9, 13, 45, 0, 0, 1, 0, -18000) 

en parsedate_tz python3 se ha trasladado a email.utils


>>> import email.utils # this works on Python2.5 and up 
>>> email.utils.parsedate_tz('Sun, 09 Mar 1997 13:45:00 -0500') 
(1997, 3, 9, 13, 45, 0, 0, 1, -1, -18000) 
+0

I thought rf822 was deprecated? – Udbhav

+0

Gracias, lo arreglaron. No hay advertencia de desactivación incluso en 2.6 :( –

+13

La técnica anterior no devuelve 'datetime', sino una' tuple'. El código completo es 'datetime.datetime.fromtimestamp (email.utils.mktime_tz (email.utils.parsedate_tz (rfcdate)), pytz.utc) '. Ref: http://parand.com/say/index.php/2008/02/11/parsing-and-normalizing-dates-with-timezones-in-python/ – AppleGrew

-1

Si eliminase la zona horaria, puede hacerlo de esta manera:

datetime.datetime.strptime('Sun, 09 Mar 1997 13:45:00', '%a, %d %b %Y %H:%M:%S') 
+0

Esto no funcionará para la mayoría de los ajustes de configuración regional. –

+1

Esto no parece tener zonas horarias –

+0

Preguntó específicamente cómo hacerlo para la fecha/hora de rfc822. Dado que rfc822 incluye la zona horaria, tu respuesta no la resuelve. Peor aún, en realidad devuelve un tiempo diferente, dependiendo de la zona horaria en la que se ejecutó el código, y la zona horaria en la que se generó la cadena (que en las aplicaciones web puede variar mucho). –

1

a partir de Python 3.3 no es email.utils.parsedate_to_datetime(date)

>>> from email.utils import parsedate_to_datetime 
>>> datestr = 'Sun, 09 Mar 1997 13:45:00 -0500' 
>>> parsedate_to_datetime(datestr) 
datetime.datetime(1997, 3, 9, 13, 45, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400))) 
Cuestiones relacionadas