web-dev-qa-db-fra.com

Comment convertir un objet time.struct_time en objet datetime?

Comment convertir un objet Python time.struct_time en un objet datetime.datetime?

J'ai une bibliothèque qui fournit le premier et une deuxième bibliothèque qui veut le second.

271
static_rtti

Utilisez time.mktime () pour convertir le temps Tuple (en heure locale) en secondes depuis l’époque, puis utilisez datetime.fromtimestamp () pour obtenir l’objet datetime.

from datetime import datetime
from time import mktime

dt = datetime.fromtimestamp(mktime(struct))
368
Rod Hyde

Comme ça:

>>> structTime = time.localtime()
>>> datetime.datetime(*structTime[:6])
datetime.datetime(2009, 11, 8, 20, 32, 35)
122
Nadia Alramli

Ce n'est pas une réponse directe à votre question (à laquelle vous avez déjà assez bien répondu). Cependant, après avoir eu des moments de morsures sur le fondement plusieurs fois, je ne saurais trop insister sur le fait qu'il vous incomberait de regarder de près ce que votre objet time.struct_time fournit, par rapport aux autres champs temporels possibles.

En supposant que vous ayez à la fois un objet time.struct_time et une autre chaîne de date/heure, comparez les deux et assurez-vous de ne pas perdre de données et de créer par inadvertance un objet datetime naïf, lorsque vous pouvez procéder autrement.

Par exemple, l'excellent module feedparser renverra un champ "publié" et peut renvoyer un objet time.struct_time dans son champ "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)

Notez maintenant ce que vous obtenez réellement avec le champ "publié".

Mon, 09 Sep 2013 19:57:42 -0400

Par Stallman La Barbe! Informations sur le fuseau horaire!

Dans ce cas, le paresseux voudra peut-être utiliser l'excellent module dateutil pour conserver les informations de fuseau horaire:

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

ce qui nous donne:

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

Vous pouvez ensuite utiliser l’objet date-heure prenant en compte le fuseau horaire pour normaliser en tout temps le temps UTC ou ce que vous pensez être génial.

35
lysdexia