yyyy example create python http datetime parsing

example - ¿Cómo analizo una cadena de fecha HTTP en Python?



strftime python (3)

¿Hay alguna manera fácil de analizar cadenas de fechas HTTP en Python? De acuerdo con el estándar , hay varias formas de formatear cadenas de fechas HTTP; el método debería ser capaz de manejar esto.

En otras palabras, quiero convertir una cadena como "Mié, 23 Sep 2009 22:15:29 GMT" a una estructura de tiempo de python.


>>> import datetime >>> datetime.datetime.strptime(''Wed, 23 Sep 2009 22:15:29 GMT'', ''%a, %d %b %Y %H:%M:%S GMT'') datetime.datetime(2009, 9, 23, 22, 15, 29)


>>> import email.utils as eut >>> eut.parsedate(''Wed, 23 Sep 2009 22:15:29 GMT'') (2009, 9, 23, 22, 15, 29, 0, 1, -1)

Si desea un objeto datetime.datetime , puede hacer:

def my_parsedate(text): return datetime.datetime(*eut.parsedate(text)[:6])


httplib.HTTPMessage(filehandle).getdate(headername) httplib.HTTPMessage(filehandle).getdate_tz(headername) mimetools.Message(filehandle).getdate() rfc822.parsedate(datestr) rfc822.parsedate_tz(datestr)

  • si tiene una secuencia de datos sin procesar, puede construir un HTTPMessage o un mimetools.Message a partir de él. puede ofrecer ayuda adicional mientras consulta el objeto de respuesta para obtener información
  • si está utilizando urllib2, ya tiene un objeto HTTPMessage oculto en el manejador de archivos devuelto por urlopen
  • Probablemente puede analizar muchos formatos de fecha
  • httplib está en el núcleo

NOTA:

  • Echa un vistazo a la implementación, HTTPMessage hereda de mimetools.Message que hereda de rfc822.Message. dos defs flotantes son de su interés tal vez, parsedate y parsedate_tz (en este último)
  • parsedate (_tz) de email.utils tiene una implementación diferente, aunque se ve más o menos igual.

puedes hacer esto, si solo tienes ese trozo de cuerda y quieres analizarlo:

>>> from rfc822 import parsedate, parsedate_tz >>> parsedate(''Wed, 23 Sep 2009 22:15:29 GMT'') (2009, 9, 23, 22, 15, 29, 0, 1, 0) >>>

pero déjame ejemplificar a través de mensajes de mimo:

import mimetools import StringIO message = mimetools.Message( StringIO.StringIO(''Date:Wed, 23 Sep 2009 22:15:29 GMT/r/n/r/n'')) >>> m <mimetools.Message instance at 0x7fc259146710> >>> m.getdate(''Date'') (2009, 9, 23, 22, 15, 29, 0, 1, 0)

o a través de mensajes http (respuestas)

>>> from httplib import HTTPMessage >>> from StringIO import StringIO >>> http_response = HTTPMessage(StringIO(''Date:Wed, 23 Sep 2009 22:15:29 GMT/r/n/r/n'')) >>> #http_response can be grabbed via urllib2.urlopen(url).info(), right? >>> http_response.getdate(''Date'') (2009, 9, 23, 22, 15, 29, 0, 1, 0)

¿derecho?

>>> import urllib2 >>> urllib2.urlopen(''https://fw.io/'').info().getdate(''Date'') (2014, 2, 19, 18, 53, 26, 0, 1, 0)

allí, ahora ahora más sobre formatos de fecha, mensajes de mimo, herramientas de mímica y su implementación pythonic ;-)

cualquiera sea el caso, se ve mejor que usar email.utils para analizar encabezados http.