Cómo analizar, por ejemplo, 2010-04-24T07: 47: 00,007 + 02: 00 con Python strptime
Pregunta
¿alguien sabe cómo analizar el formato como se describe en el título utilizando el método strptime pitones?
Tengo algo similar a esto:
import datetime
date = datetime.datetime.strptime(entry.published.text, '%Y-%m-%dT%H:%M:%S.Z')
Me parece que no puede averiguar qué tipo de timeformat esto es. Por cierto, soy un novato en el lenguaje Python (estoy acostumbrado a C #).
Actualizar
Así es como he cambiado el código basado en el consejo (respuestas) a continuación:
from dateutil.parser import *
from datetime import *
date = parse(entry.published.text)
Solución
Esa fecha es en la norma ISO 8601, o más específicamente RFC 3339 , formato.
Estas fechas no pueden ser analizados con strptime
. Hay una Python tema que trata este .
dateutil.parser.parse
puede manejar una amplia variedad de fechas, incluyendo la que en su ejemplo.
Si está utilizando un módulo externo para XML o RSS análisis, es probable que haya una rutina en la que hay que analizar esa fecha.
Otros consejos
Aquí está una manera buena para encontrar la respuesta: el uso de strftime
, construir una cadena de formato que emitirá lo que se ve. Esa cadena será, por definición, ser la cadena necesaria para analizar el tiempo con strptime
.
Si usted está tratando de analizar RSS o Atom a continuación, utilizar universal RSS Analizador . Es compatible con muchos fecha / formatos de hora .
>>> import feedparser # parse feed
>>> d = feedparser.parse("http://stackoverflow.com/feeds/question/3946689")
>>> t = d.entries[0].published_parsed # get date of the first entry as a time tuple
>>> import datetime
>>> datetime.datetime(*t[:6]) # convert time tuple to datetime object
datetime.datetime(2010, 10, 15, 22, 46, 56)
Ese es el formato de fecha y hora estándar XML, ISO 8601. Si ya está utilizando una biblioteca de XML, la mayoría de ellos han construido en analizadores de fecha y hora. xml.utils.iso8601
funciona razonablemente bien.
import xml.utils.iso8601
date = xml.utils.iso8601.parse(entry.published.text)
Se puede mirar a un montón de otras maneras de lidiar con eso aquí: http://wiki.python.org/moin/WorkingWithTime