import time
def format_elapsed(start_time, end_time):
elapsed = end_time - start_time
if elapsed < 1:
return f"{elapsed:.6f}s" # 小數秒,精確到 6 位
elif elapsed < 60:
return f"{elapsed:.2f} 秒" # 精確到百分之一秒
elif elapsed < 3600:
minutes = int(elapsed) // 60
seconds = int(elapsed) % 60
return f"{minutes:02d}:{seconds:02d}"
elif elapsed < 86400:
hours = int(elapsed) // 3600
minutes = (int(elapsed) % 3600) // 60
return f"{hours:02d}:{minutes:02d}"
else:
days = int(elapsed) // 86400
hours = (int(elapsed) % 86400) // 3600
minutes = (int(elapsed) % 3600) // 60
return f"{days:02d}:{hours:02d}:{minutes:02d}"
start = time.time()
# time.sleep(1890000) # 或試試 0.000123、65、3700 等
end = time.time()
print("執行時間:", format_elapsed(start, start+19000))
顯示結果乾淨統一
不用擔心浮點誤差或「多餘的長尾小數」
精度夠用(6 位秒以下通常只用在效能測試)
整體維護與閱讀更方便
之後你可以加 reset()、lap()、__str__() 等功能
可以多個 Timer 並存
更適合封裝到大型專案或模組中
import time
class ElapsedTimer:
def __init__(self):
self.start_time = None
self.end_time = None
def start(self):
self.start_time = time.time()
self.end_time = None # 每次重啟都清掉
def stop(self):
self.end_time = time.time()
def elapsed(self):
if self.start_time is None:
return 0
if self.end_time is None:
return time.time() - self.start_time
return self.end_time - self.start_time
def format(self):
elapsed = self.elapsed()
if elapsed < 1:
return f"{elapsed:.6f}s"
elif elapsed < 60:
return f"{elapsed:.2f} 秒"
elif elapsed < 3600:
minutes = int(elapsed) // 60
seconds = int(elapsed) % 60
return f"{minutes:02d}:{seconds:02d}"
elif elapsed < 86400:
hours = int(elapsed) // 3600
minutes = (int(elapsed) % 3600) // 60
return f"{hours:02d}:{minutes:02d}"
else:
days = int(elapsed) // 86400
hours = (int(elapsed) % 86400) // 3600
minutes = (int(elapsed) % 3600) // 60
return f"{days:02d}:{hours:02d}:{minutes:02d}"
timer = ElapsedTimer()
timer.start()
# 模擬你要計時的事情
time.sleep(1.2345)
timer.stop()
print("花費時間(秒):", timer.elapsed())
print("格式化時間:", timer.format())