Sie haben auf die eine oder andere Weise ein Problem mit Ihrem datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
Ausdruck.
(1) Wenn Sie nur den Unterschied zwischen zwei Zeitpunkten in Sekunden benötigen, time.time()
erledigt der sehr einfache Job die Aufgabe.
(2) Wenn Sie diese Zeitstempel für andere Zwecke verwenden, müssen Sie überlegen, was Sie tun, da das Ergebnis überall stark riecht:
gmtime()
Gibt ein Zeittupel in UTC zurück , mktime()
erwartet jedoch ein Zeittupel in der Ortszeit.
Ich bin in Melbourne, Australien, wo die Standard-TZ UTC + 10 ist, aber die Sommerzeit ist noch bis morgen früh in Kraft, also ist es UTC + 11. Als ich Folgendes ausführte, war es 2011-04-02T20: 31 Ortszeit hier ... UTC war 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
Sie werden feststellen, dass t3, das Ergebnis Ihres Ausdrucks, UTC + 1 ist, was UTC + (mein lokaler DST-Unterschied) zu sein scheint ... nicht sehr aussagekräftig. Sie sollten in Betracht ziehen, datetime.datetime.utcnow()
die zu verwenden, die beim Ein- und Ausschalten der Sommerzeit nicht um eine Stunde springt und möglicherweise präziser ist alstime.time()