2011-11-05 38 views

Trả lời

32

Nó không khó để sử dụng phương pháp thời gian tuple và vẫn giữ lại micro:

>>> t = datetime.datetime.now() 
>>> t 
datetime.datetime(2011, 11, 5, 11, 26, 15, 37496) 

>>> time.mktime(t.timetuple()) + t.microsecond/1E6 
1320517575.037496 
+1

Bạn có thể giải thích tại sao giải pháp này tốt hơn '(dt - datetime.datetime.utcfromtimestamp (0)). Total_seconds()'? Việc bổ sung bằng tay micro giây dường như không phù hợp với tôi. –

+2

@RamRachum: công thức của bạn giả định rằng 'dt' là thời gian UTC. 'mktime()' giả định rằng đầu vào là thời gian cục bộ. Bạn nên tránh sử dụng các đối tượng datetime ngây thơ đại diện cho giờ địa phương trừ khi bạn muốn hiển thị chúng ngay lập tức. Sử dụng thời gian UTC hoặc các đối tượng datetime nhận biết múi giờ thay thế. – jfs

11

Cho một đối tượng datetime.datetimedt, bạn có thể sử dụng

(dt - datetime.datetime.utcfromtimestamp(0)).total_seconds() 

Ví dụ:

>>> dt = datetime.datetime.now(); t = time.time() 
>>> t 
1320516581.727343 
>>> (dt - datetime.datetime.utcfromtimestamp(0)).total_seconds() 
1320516581.727296 

Lưu ý rằng phương pháp timedelta.total_seconds() đã được giới thiệu trong Python 2.7.

+1

'((24 * 3600 * td.days + td .seconds) * 1000000 + td.microseconds)/1e6' trên Python <2.7 – jfs

6

Một sự kết hợp của datetime.timetuple()time.mktime():

>>> import datetime 
>>> import time 
>>> now = datetime.datetime.now() 
>>> secondsSinceEpoch = time.mktime(now.timetuple()) 
+0

Điều này giảm phụ phần thứ hai của thời gian. –

+0

+1 bởi vì câu trả lời này là hữu ích anyway và downvote là không hợp lý. –

+0

+1 từ tôi nữa. Tôi đồng ý với Sven về cả hai số :-) –

21
time.mktime(dt_obj.timetuple()) 

Nên làm các trick.

+5

Điều này sẽ giảm phần phụ của thời gian. –

+3

+1 bởi vì câu trả lời này là hữu ích anyway và downvote là không hợp lý. –

3

Tôi biết đây là một câu hỏi cũ, nhưng trong python 3.3+ hiện nay là một cách dễ dàng hơn để làm điều này bằng cách sử dụng datetime.timestamp() phương pháp:

from datetime import datetime 
timestamp = datetime.now().timestamp() 
+2

'timestamp = time.time()' – jfs

+0

Điều đó sẽ xử lý trường hợp cụ thể này (tìm dấu thời gian hiện tại), nhưng sử dụng '' datetime.timestamp() '' là mạnh hơn vì nó cho phép bạn tìm dấu thời gian tại một datetime tùy ý. – lsowen

+0

Cung cấp một ví dụ tốt hơn sau đó. Bởi vì '.now(). Dấu thời gian()' là nghiêm trọng hơn 'time.time()'. Các cựu có thể sản xuất một kết quả sai trong quá trình chuyển đổi DST. Một ví dụ tốt hơn: '.now (utc) .timestamp()' (ít nhất, nó tạo ra kết quả đúng). – jfs

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