Hai un problema in un modo o nell'altro con la tua datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
espressione.
(1) Se tutto ciò che serve è la differenza tra due istanti in pochi secondi, il semplice time.time()
fa il lavoro.
(2) Se stai usando questi timestamp per altri scopi, devi considerare cosa stai facendo, perché il risultato ha un grande odore dappertutto:
gmtime()
restituisce una tupla oraria in UTC ma si mktime()
aspetta una tupla oraria nell'ora locale.
Sono a Melbourne, in Australia, dove la TZ standard è UTC + 10, ma l'ora legale è ancora in vigore fino a domani mattina, quindi è UTC + 11. Quando ho eseguito il seguente, era 2011-04-02T20: 31 ora locale qui ... UTC era 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
Noterai che t3, il risultato della tua espressione è UTC + 1, che sembra essere UTC + (la mia differenza di ora legale locale) ... non molto significativo. Dovresti considerare l'uso datetime.datetime.utcnow()
che non salterà di un'ora quando l'ora legale si accende / spegne e potresti darti più precisione ditime.time()