Cómo convertir un tiempo de Python.¿estructurar un objeto time en un objeto datetime?


¿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...

Author: Peter Mortensen, 2009-11-08

3 answers

Use tiempo.mktime () para convertir la tupla de tiempo (en localtime) en segundos desde la Época, use datetime.fromtimestamp () para obtener el objeto datetime.

from time import mktime
from datetime import datetime

dt = datetime.fromtimestamp(mktime(struct))
 354
Author: Rod Hyde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-06 17:15:36

Así:

>>> structTime = time.localtime()
>>> datetime.datetime(*structTime[:6])
datetime.datetime(2009, 11, 8, 20, 32, 35)
 118
Author: Nadia Alramli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-08 20:40:03

Esta no es una respuesta directa a tu pregunta (que ya fue respondida bastante bien). Sin embargo, después de haber tenido veces morderme en el fundamento varias veces, no puedo enfatizar lo suficiente que sería necesario que usted mire de cerca en lo que su tiempo.objeto struct_time está proporcionando, frente a lo que otros campos de tiempo pueden tener.

Asumiendo que tienes ambos un tiempo.objeto struct_time, y alguna otra cadena de fecha/hora, compare los dos, y asegúrese de que no está perdiendo datos y creando inadvertidamente un ingenuo objeto datetime, cuando se puede hacer lo contrario.

Por ejemplo, el módulo excellent feedparser devolverá un campo "publicado" y puede devolver un tiempo.objeto struct_time en su campo "published_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 tenga en cuenta 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 perezoso podría querer usar el módulo excellent dateutil para mantener la zona horaria información:

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()

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

Uno podría usar el objeto datetime con reconocimiento de zona horaria para normalizar todo el tiempo a UTC o lo que crea que es increíble.

 32
Author: lysdexia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-15 09:02:30