2011-08-30 28 views
5

Tôi đã xem xét tất cả các xung quanh, và dường như có rất nhiều hack, nhưng không có cách đơn giản, "tốt" để làm điều này. Tôi muốn chuyển đổi một đối tượng Python datetime thành microtime như trả về time.time() (giây.microseconds).Trọn gói Python đến microtime

Cách tốt nhất để làm điều này là gì? Sử dụng mktime() dải ra khỏi micro giây hoàn toàn, bạn có thể hình dung được một số timedelta, nhưng điều đó có vẻ không đúng. Bạn cũng có thể sử dụng một số float(strftime("%s.%f")) (tính số giây làm tròn chính xác), nhưng điều đó có vẻ giống như một siêu hack.

Cách "đúng" để thực hiện việc này là gì?

Trả lời

6
time.mktime(dt.timetuple()) + dt.microsecond/1000000.0 

tác phẩm nếu bạn không muốn sử dụng strftimefloat.

Nó trả về cùng một điều như time.time() với dt = datetime.datetime.now().

+0

Nếu múi giờ cho đối tượng ngày giờ và múi giờ địa phương của bạn có thể không giống nhau, bạn nên sử dụng calendar.gmtime (dt.utctimetuple()) thay vì –

+0

Tôi nghĩ bạn có nghĩa là 'calendar.timegm', và câu trả lời tương tự như phiên bản của Mark - có nghĩa là nó không đúng đối với các đối tượng' datetime' không phải là UTC. Thời gian từ thời đại cho tôi là giống như đối với một người nào đó ở UTC, không khác biệt với số tiền UTC của tôi. – agf

+0

Nó luôn luôn đúng bất kể múi giờ của bạn, vì dt.utctimetuple trả về thời gian tuple của đối tượng datetime trong UTC. Và calendar.timegm mất một thời gian biểu utc. –

2
def microtime(dt): 
    unixtime = dt - datetime.datetime(1970, 1, 1) 
    return unixtime.days*24*60*60 + unixtime.seconds + unixtime.microseconds/1000000.0 
+0

Điều này không cho tôi giống 'time.time()' cho 'datetime.datetime.now()'. Có vẻ như bạn đang giả sử 'dt' là UTC, do đó bạn sẽ bị tắt theo múi giờ UTC của múi giờ. – agf

+0

@agf, 'time.time()' là gì? Tôi không thể tìm thấy nó trong tài liệu: http://docs.python.org/library/datetime.html –

+0

Không phải 'datetime.time',' time.time() '- http: //docs.python. org/library/time.html # time.time – agf

Các vấn đề liên quan