313 votes

Comment voulez-vous convertir un python de temps.struct_time objet dans un objet datetime?

Comment voulez-vous convertir un python time.struct_time objet en datetime.datetime objet? J'ai une bibliothèque qui fournit le premier et un deuxième bibliothèque qui veut que le second...

407voto

Rod Hyde Points 5756

L'utilisation du temps.mktime() pour convertir le temps tuple (localtime) en secondes depuis l'Epoch, puis utiliser datetime.fromtimestamp() pour obtenir l'objet datetime.

from time import mktime
from datetime import datetime

dt = datetime.fromtimestamp(mktime(struct))

134voto

Nadia Alramli Points 40381

Comme ceci:

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

40voto

lysdexia Points 523

Ce n'est pas une réponse directe à votre question (qui a été répondu assez bien ci-dessus). Cependant, ayant eu le temps de me mordre sur le fondement plusieurs fois, je ne peux pas insister assez sur le fait qu'il vous incombera à regarder de plus près à ce que votre temps.struct_time objet est de fournir, par opposition à ce que d'autres champs de l'heure peut avoir.

En supposant que vous avez à la fois une heure.struct_time objet, et quelques autres chaîne de date/heure, comparer les deux, et assurez-vous de ne pas perdre de données et, par inadvertance, la création d'un naïf objet datetime, quand on peut faire autrement.

Par exemple, l'excellent feedparser module sera de retour d'une "publié" sur le terrain et peut retourner une fois.struct_time objet dans son "published_parsed" champ:

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)

Maintenant, notez ce que vous obtenez en fait avec le "publié" sur le terrain.

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

Par Stallman Barbe! Le fuseau horaire de l'info!

Dans ce cas, le paresseux pourrait vouloir utiliser l'excellent dateutil module de garder le fuseau horaire info:

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

On pourrait alors utiliser le fuseau horaire courant datetime objet de normaliser tous les temps UTC ou ce que vous pensez est génial.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X