2010-09-03 48 views

Trả lời

22
import time 
now = time.time() 
... 
later = time.time() 
difference = int(later - now) 
+1

Điều này cho biết một đối số "TypeError: int() phải là một chuỗi, một đối tượng giống byte hoặc một số, không phải lỗi" datetime.timedelta '"trong Python3. Xem câu trả lời của Robert Longson. – typoerrpr

2

Nếu tất cả những gì bạn cần là đo khoảng thời gian, bạn có thể sử dụng hàm time.time() trả về giây kể từ Epoch dưới dạng số dấu phẩy động.

+0

tuyệt vời, làm cách nào để tạo đối tượng datetime với điểm nổi trong vài giây để in độc đáo? – Richard

+0

Bạn đang nói về sự khác biệt về thời gian hay thời gian tuyệt đối? Cái sau có thể được chuyển đổi từ số giây thô thành cấu trúc thời gian (với các trường năm, tháng vv) với 'time.localtime()' hoặc 'time.gmtime()' và sau đó được chuyển thành chuỗi với 'time.asctime () '/''time.strftime()' hoặc được sử dụng để xây dựng đối tượng 'datetime.datetime'. Tôi không chắc chắn nếu có bất kỳ chức năng trong thư viện chuẩn Python để phân hủy/in chênh lệch thời gian độc đáo (mặc dù đây là nhiệm vụ dễ dàng hơn nhiều so với đại diện chính xác của thời gian tuyệt đối). – rkhayrov

6

Phương pháp total_seconds sẽ trả lại sự khác biệt, bao gồm bất kỳ phần phân số nào.

from datetime import datetime 
now = datetime.now() 
... 
later = datetime.now() 
difference = (later - now).total_seconds() 

Bạn có thể chuyển đổi đó để một số nguyên qua int() nếu bạn muốn

+1

Tôi nhận được đối tượng 'AttributeError: 'float' không có thuộc tính 'total_seconds'' –

2

Thêm lên các điều khoản của tuple timedelta với nhân đầy đủ sẽ cho bạn câu trả lời của bạn. diff.days*24*60*60 + difference.seconds

from datetime import datetime 
now = datetime.now() 
... 
later = datetime.now() 
diff = later-now 
diff_in_seconds = diff.days*24*60*60 + diff.seconds 

Biến 'diff' là một đối tượng timedelta đó là một tuple của (ngày, giây, micro) như được giải thích một cách chi tiết ở đây https://docs.python.org/2.4/lib/datetime-timedelta.html. Tất cả các đơn vị khác (giờ, phút ..) được chuyển đổi thành định dạng này.

>> diff = later- now 
>> diff 
datetime.timedelta(0, 8526, 689000) 
>> diff_in_seconds = diff.days*24*60*60 + diff.seconds 
>> diff_in_seconds 
>> 8527 

Một cách khác để xem nó sẽ là nếu thay vì sau này (do đó có chênh lệch thời gian tích cực), thay vào đó bạn có chênh lệch thời gian âm (trước đó) vẫn giống như trong ví dụ trước

>> diff = earlier-now 
>> diff 
datetime.timedelta(-1, 77873, 311000) 
>> diff_in_seconds = diff.days*24*60*60 + diff.seconds 
>> diff_in_seconds 
>> -8527 

Do đó, nếu chúng tôi chắc chắn thời hạn dưới 1 ngày, cần phải tính đến thời hạn trong ngày, vì đó là một thuật ngữ quan trọng trong trường hợp chênh lệch thời gian âm.

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