libreria - ¿Cómo convertir un objeto Python time.struct_time en un objeto datetime?
time.clock python (3)
¿Cómo convertir un objeto Python time.struct_time
en un objeto datetime.datetime
?
Tengo una biblioteca que proporciona la primera y una segunda biblioteca que quiere la segunda ...
Esta no es una respuesta directa a su pregunta (que ya fue respondida bastante bien). Sin embargo, habiendo tenido momentos en los que me mordí el fundamento varias veces, no puedo enfatizar lo suficiente como para que le parezca que observe atentamente lo que proporciona su objeto time.struct_time, en comparación con lo que otros campos de tiempo pueden tener.
Suponiendo que tiene un objeto time.struct_time y alguna otra cadena de fecha / hora, compare los dos, y asegúrese de que no está perdiendo datos y que está creando inadvertidamente un objeto de fecha y hora ingenuo, cuando puede hacer lo contrario.
Por ejemplo, el excelente módulo feedparser devolverá un campo "publicado" y puede devolver un objeto time.struct_time en su campo "publish_parsed":
time.struct_time(tm_year=2013, tm_mon=9, tm_mday=9, tm_hour=23, tm_min=57, tm_sec=42, tm_wday=0, tm_yday=252, tm_isdst=0)
Ahora note lo que realmente obtiene con el campo "publicado".
Mon, 09 Sep 2013 19:57:42 -0400
¡Por la barba de Stallman ! Información de zona horaria!
En este caso, el hombre perezoso podría querer usar el excelente módulo dateutil para mantener la información de la zona horaria:
from dateutil import parser
dt = parser.parse(entry["published"])
print "published", entry["published"])
print "dt", dt
print "utcoffset", dt.utcoffset()
print "tzinfo", dt.tzinfo
print "dst", dt.dst()
lo que nos da:
published Mon, 09 Sep 2013 19:57:42 -0400
dt 2013-09-09 19:57:42-04:00
utcoffset -1 day, 20:00:00
tzinfo tzoffset(None, -14400)
dst 0:00:00
Luego se podría usar el objeto de fecha y hora con fecha horaria para normalizar todo el tiempo a UTC o lo que creas que es increíble.
Me gusta esto:
>>> structTime = time.localtime()
>>> datetime.datetime(*structTime[:6])
datetime.datetime(2009, 11, 8, 20, 32, 35)
Use time.mktime() para convertir la tupla de tiempo (en hora local) en segundos desde la Época, luego use datetime.fromtimestamp() para obtener el objeto datetime.
from time import mktime
from datetime import datetime
dt = datetime.fromtimestamp(mktime(struct))