Anda memiliki masalah dengan satu atau lain cara datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
ekspresi .
(1) Jika yang Anda butuhkan adalah perbedaan antara dua instance dalam hitungan detik, yang paling sederhana time.time()
adalah pekerjaannya.
(2) Jika Anda menggunakan stempel waktu untuk tujuan lain, Anda perlu mempertimbangkan apa yang Anda lakukan, karena hasilnya memiliki bau besar di atasnya:
gmtime()
mengembalikan tuple waktu dalam UTC tetapi mktime()
mengharapkan tuple waktu dalam waktu lokal.
Saya di Melbourne, Australia di mana TZ standarnya adalah UTC + 10, tetapi penghematan siang hari masih berlaku sampai besok pagi sehingga UTC + 11. Ketika saya mengeksekusi berikut, itu adalah 2011-04-02T20: 31 waktu setempat di sini ... UTC adalah 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
Anda akan melihat bahwa t3, hasil dari ekspresi Anda adalah UTC + 1, yang tampaknya menjadi UTC + (perbedaan DST lokal saya) ... tidak terlalu berarti. Anda harus mempertimbangkan untuk menggunakan datetime.datetime.utcnow()
yang tidak akan melompat satu jam ketika DST menyala / mati dan dapat memberikan Anda lebih presisi daripadatime.time()