Đây là một giải pháp hỗ trợ tìm kiếm sự khác biệt ngay cả khi thời gian kết thúc ít hơn thời gian bắt đầu (khoảng thời gian nửa đêm), chẳng hạn như 23:55:00-00:25:00
(thời lượng nửa giờ):
#!/usr/bin/env python
from datetime import datetime, time as datetime_time, timedelta
def time_diff(start, end):
if isinstance(start, datetime_time): # convert to datetime
assert isinstance(end, datetime_time)
start, end = [datetime.combine(datetime.min, t) for t in [start, end]]
if start <= end: # e.g., 10:33:26-11:15:49
return end - start
else: # end < start e.g., 23:55:00-00:25:00
end += timedelta(1) # +day
assert end > start
return end - start
for time_range in ['10:33:26-11:15:49', '23:55:00-00:25:00']:
s, e = [datetime.strptime(t, '%H:%M:%S') for t in time_range.split('-')]
print(time_diff(s, e))
assert time_diff(s, e) == time_diff(s.time(), e.time())
Đầu ra
0:42:23
0:30:00
time_diff()
trả về một đối tượng timedelta mà bạn có thể truyền (như một phần của chuỗi) cho một mean()
hàm trực tiếp, ví dụ:
#!/usr/bin/env python
from datetime import timedelta
def mean(data, start=timedelta(0)):
"""Find arithmetic average."""
return sum(data, start) / len(data)
data = [timedelta(minutes=42, seconds=23), # 0:42:23
timedelta(minutes=30)] # 0:30:00
print(repr(mean(data)))
# -> datetime.timedelta(0, 2171, 500000) # days, seconds, microseconds
Các mean()
kết quả cũng là timedelta()
đối tượng mà bạn có thể chuyển đổi sang giây ( td.total_seconds()
phương pháp (vì Python 2.7)), giờ ( td / timedelta(hours=1)
(Python 3)), vv