У вас так чи інакше виникає проблема зі своїм datetime.datetime.fromtimestamp(time.mktime(time.gmtime())) виразом.
(1) Якщо все, що вам потрібно, це різниця між двома моментами в секундах, дуже просто time.time()виконує цю роботу.
(2) Якщо ви використовуєте ці часові позначки для інших цілей, вам потрібно врахувати, що ви робите, оскільки результат має великий запах у всьому світі:
gmtime()повертає часовий кортеж у UTC, але mktime()очікує, що зчитування часу буде місцевим часом.
Я в Мельбурні, Австралія, де стандартний TZ - UTC + 10, але літній час все ще діє до завтрашнього ранку, тому це UTC + 11. Коли я виконав наступне, це був місцевий час 2011-04-02T20: 31 ... UTC було 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
Ви помітите, що t3, результатом вашого вираження є UTC + 1, що видається UTC + (моя локальна різниця DST) ... не дуже змістовно. Вам слід подумати про використання, datetime.datetime.utcnow()яке не скаче на годину, коли DST включається / вимикається, і це може дати вам більшу точність, ніжtime.time()