488 votos

Cómo analizar ISO fecha formateada en python?

Necesito analizar cadenas como "2008-09-03T20: 56: 35.450686Z" en tipo datetime de Python.

He encontrado solamente strptime en python 2.5 std lib, pero no es tan conveniente.

¿Cuál es la mejor manera de hacer esto?

337voto

Flimm Puntos 8870

Como Alexander menciona, parece que python-dateutil funciona muy bien. Él encontró esta solución:

 import dateutil.parser
d1 = '2008-09-03T20:56:35.450686Z'
d2 = dateutil.parser.parse(d1)
d3 = d2.astimezone(dateutil.tz.tzutc())
 

130voto

sethbc Puntos 907

Nota en Py3K (y, posiblemente, en una nueva versión de 2.6), el carácter% f atrapa microsegundos.

 >>> datetime.datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%f%Z")
 

Ver tema aquí

66voto

Nicholas Riley Puntos 26161

Prueba el ISO8601 módulo; que hace exactamente esto.

Hay varias otras opciones mencionadas en el WorkingWithTime página en el wiki python.org.

35voto

Ted Puntos 854
import re, fecha y hora
s = "2008-09-03T20: 56: 35.450686Z"
d = datetime.datetime (* mapa (int, re.split ('[^ \ d]', s) [: - 1]))

25voto

tzot Puntos 32224

¿Cuál es el error exacto se obtiene? ¿Es como el siguiente:

 >>> datetime.datetime.strptime("2008-08-12T12:20:30.656234Z", "%Y-%m-%dT%H:%M:%S.Z")
ValueError: time data did not match format:  data=2008-08-12T12:20:30.656234Z  fmt=%Y-%m-%dT%H:%M:%S.Z
 

Si es así, usted puede dividir su cadena de entrada en ".", Y luego agregar los microsegundos a la fecha y hora que era.

Prueba esto:

 >>> def gt(dt_str):
        dt, _, us= dt_str.partition(".")
        dt= datetime.datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S")
        us= int(us.rstrip("Z"), 10)
        return dt + datetime.timedelta(microseconds=us)

>>> gt("2008-08-12T12:20:30.656234Z")
datetime.datetime(2008, 8, 12, 12, 20, 30, 656234)
>>> 
 

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: