example create python datetime iso8601 rfc3339

create - timedelta python example



Cómo convertir la cadena.isoformat() de Python nuevamente en objeto datetime (2)

Como resultado, esta es la mejor "solución" actual a esta pregunta:

pip install python-dateutil

Entonces...

import datetime import dateutil.parser def getDateTimeFromISO8601String(s): d = dateutil.parser.parse(s) return d

Entonces, en Python 3, puede generar una fecha ISO 8601 con .isoformat (), pero no puede convertir una cadena creada por isoformat () nuevamente en un objeto datetime porque las directivas datetime de Python no coinciden correctamente. Es decir,% z = 0500 en lugar de 05:00 (que es producido por .isoformat ()).

Por ejemplo:

>>> strDate = d.isoformat() >>> strDate ''2015-02-04T20:55:08.914461+00:00'' >>> objDate = datetime.strptime(strDate,"%Y-%m-%dT%H:%M:%S.%f%z") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:/Python34/Lib/_strptime.py", line 500, in _strptime_datetime tt, fraction = _strptime(data_string, format) File "C:/Python34/Lib/_strptime.py", line 337, in _strptime (data_string, format)) ValueError: time data ''2015-02-04T20:55:08.914461+00:00'' does not match format ''%Y-%m-%dT%H:%M:%S.%f%z''

De la documentación strptime de Python: ( https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior )

% z UTC offset en la forma + HHMM o -HHMM (cadena vacía si el objeto es ingenuo). (vacío), +0000, -0400, +1030

Entonces, en resumen, Python ni siquiera se adhiere a sus propias directivas de formateo de cadenas.

Sé que la fecha y hora ya es terrible en Python, pero esto realmente va más allá de lo irrazonable en la tierra de la estupidez simple.

Dime que esto no es verdad.


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)

Uso:

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