Bạn có một vấn đề theo cách này hay cách khác với datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
biểu hiện .
(1) Nếu tất cả những gì bạn cần là sự khác biệt giữa hai nội dung trong vài giây, thì công việc rất đơn giản time.time()
.
(2) Nếu bạn đang sử dụng các dấu thời gian đó cho các mục đích khác, bạn cần xem xét những gì bạn đang làm, vì kết quả có mùi lớn trên tất cả:
gmtime()
trả về một tuple thời gian trong UTC nhưng mktime()
mong đợi một tuple thời gian trong giờ địa phương.
Tôi đang ở Melbourne, Úc, nơi TZ tiêu chuẩn là UTC + 10, nhưng tiết kiệm ánh sáng ban ngày vẫn còn hiệu lực cho đến sáng mai nên đó là UTC + 11. Khi tôi thực hiện như sau, đó là 2011-04-02T20: 31 giờ địa phương tại đây ... UTC là 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
Bạn sẽ nhận thấy rằng t3, kết quả của biểu thức của bạn là UTC + 1, dường như là UTC + (sự khác biệt DST cục bộ của tôi) ... không có ý nghĩa lắm. Bạn nên cân nhắc việc sử dụng datetime.datetime.utcnow()
sẽ không tăng thêm một giờ khi DST bật / tắt và có thể cho bạn độ chính xác cao hơntime.time()