Vous avez un problème d'une manière ou d'une autre avec votre datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
expression.
(1) Si tout ce dont vous avez besoin est la différence entre deux instants en quelques secondes, le très simple time.time()
fait le travail.
(2) Si vous utilisez ces horodatages à d'autres fins, vous devez considérer ce que vous faites, car le résultat a une grande odeur partout:
gmtime()
renvoie un tuple d'heure en UTC mais mktime()
attend un tuple d'heure en heure locale.
Je suis à Melbourne, en Australie, où la TZ standard est UTC + 10, mais l'heure d'été est toujours en vigueur jusqu'à demain matin, donc c'est UTC + 11. Lorsque j'ai exécuté ce qui suit, il était le 2011-04-02T20: 31 heure locale ici ... UTC était le 2011-04-02T09: 31
>>> import time, datetime
>>> t1 = time.gmtime()
>>> t2 = time.mktime(t1)
>>> t3 = datetime.datetime.fromtimestamp(t2)
>>> print t0
1301735358.78
>>> print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
>>> print t2
1301700663.0
>>> print t3
2011-04-02 10:31:03 ### this is UTC+1
>>> tt = time.time(); print tt
1301736663.88
>>> print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
>>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
>>> print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time
Vous remarquerez que t3, le résultat de votre expression est UTC + 1, qui semble être UTC + (ma différence DST locale) ... pas très significatif. Vous devriez envisager d'utiliser datetime.datetime.utcnow()
ce qui ne sautera pas d'une heure lorsque l'heure d'été est activée / désactivée et peut vous donner plus de précision quetime.time()