httplib.HTTPMessage(filehandle).getdate(headername)
httplib.HTTPMessage(filehandle).getdate_tz(headername)
mimetools.Message(filehandle).getdate()
rfc822.parsedate(datestr)
rfc822.parsedate_tz(datestr)
- si tiene un flujo de datos en bruto, se puede construir un HttpMessage o un mimetools. Mensaje de eso puede ofrecer ayuda adicional al consultar el objeto de respuesta para informaciones
- si está utilizando urllib2, que ya tiene un objeto HttpMessage escondido en el FileHandler devuelto por urlopen
- probablemente puede analizar muchos formatos de fecha
- httplib está en el núcleo
NOTA:
- tenía un vistazo a la aplicación, HttpMessage hereda de mimetools.Message que hereda de rfc822.Message. dos defs flotantes son de su interés, 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.
puede hacerlo, si sólo tiene ese pedazo de cuerda y desea 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 me deja ejemplificar a través de mensajes MIME:
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 vía 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)
¿verdad?
>>> import urllib2
>>> urllib2.urlopen('https://fw.io/').info().getdate('Date')
(2014, 2, 19, 18, 53, 26, 0, 1, 0)
allí, ya que ahora más sobre los formatos de fecha, los mensajes MIME MIME, herramientas y su aplicación Pythonic ;-)
cualquiera que sea el caso, se ve mejor que el uso de email.utils para analizar las cabeceras HTTP.
Sí, el parsedate es probablemente el mejor compromiso, aunque su "análisis tolerante RFC 2822" no es 100% compatible con RFC 2616'2 que exige "DEBE" - por ejemplo, falla épica en formato RFC 850 con años de dos dígitos, como "Domingo, 06-Nov-94 08:49:37 GMT", sin embargo, 2616 dice que un cliente DEBE poder analizar las fechas de RFC 850 (suspiro). –
email.Utils.parsedate parece suficiente, gracias. Pero es confuso que a veces se lo llame email.utils, y algunas veces correo electrónico. Utils. Supongo que la versión de email.Utils es una antigua variante heredada que ha quedado obsoleta (?) –
'email.utils.parsedate es email.Utils.parsedate -> True' Parece que * U * tils es un cargador lento. – jfs