2013-08-27 44 views
17

Tôi tính toán thời gian trung bình và tôi muốn hiển thị trung bình kết quả mà không có micro giây.Python timedelta loại bỏ micro giây

avg = sum(datetimes, datetime.timedelta(0))/len(datetimes) 

Cảm ơn

+0

'datetimes' ... là gì một danh sách các timedeltas? Nếu vậy, số tiền trả về một đối tượng timedelta bao gồm micro giây ... vậy vấn đề là gì? – tdelaney

+0

'avg.strftime ("% Y-% m-% d% H:% M:% S ")', nhưng nó sẽ trả về chuỗi. –

Trả lời

19

Lấy timedetla và loại bỏ micro riêng của mình, như micro và read-only thuộc tính:

avg = sum(datetimes, datetime.timedelta(0))/len(datetimes) 
avg = avg - datetime.timedelta(microseconds=avg.microseconds) 

Bạn có thể thực hiện chức năng nhỏ của riêng của bạn nếu nó là một nhu cầu lặp đi lặp lại:

import datetime 

def chop_microseconds(delta): 
    return delta - datetime.timedelta(microseconds=delta.microseconds) 

Tôi chưa tìm được giải pháp tốt hơn.

+5

Nó phải là 'micro giây', theo như tôi có thể nói. – daviewales

+0

phải là 'micro giây'. Bằng chứng [ở đây] (http://pastebin.com/P4qH1G51) –

+1

Nó là 'micro giây' trên các đối tượng timedelta, nhưng 'micro giây' về các đối tượng thời gian và ngày giờ. –

12

Nếu đó là chỉ dành riêng cho màn hình, ý tưởng này hoạt động:

avgString = str(avg).split(".")[0] 

Ý tưởng là để chỉ lấy những gì là trước khi các điểm. Nó sẽ trở lại 01:23:45 cho 01: 23: 45,1235

2

tùy chọn khác, được đưa ra timedetla bạn có thể làm:

avg = datetime.timedelta(seconds=math.ceil(avg.total_seconds())) 

Bạn có thể thay thế các math.ceil(), với math.round() hoặc math.floor(), tuỳ thuộc vào tình hình.

3

Bạn có thể thay đổi các yếu tố của datetimes như vậy:

In [1]: datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) 
Out[1]: datetime.datetime(2017, 4, 28, 0, 0) 
Các vấn đề liên quan