Deep Learningの学習工程のように、処理時間が長い場合に、定期的に下図のようにログを表示したかったのですが、timeモジュールのtime()関数で得られた秒数の差を 時:分:秒 の hh:mm:ss のフォーマットで表示する方法がみつからない。。
deletetimeモジュールを使うと、近いところまでは出来るのですが、時の部分が1桁になり、細かい調整ができません。。
import datetime
print(datetime.timedelta(seconds=12345))
# 3:25:45
細かい事を気にしなければdatetimeを使うのも良いかと思いますが、結局、秒数を hh:mm:ssフォーマットの文字列を返す関数を作ってみました。
def elapsed_time_str(seconds):
"""秒をhh:mm:ss形式の文字列で返す
Parameters
----------
seconds : float
表示する秒数
Returns
-------
str
hh:mm:ss形式の文字列
"""
seconds = int(seconds + 0.5) # 秒数を四捨五入
h = seconds // 3600 # 時の取得
m = (seconds - h * 3600) // 60 # 分の取得
s = seconds - h * 3600 - m * 60 # 秒の取得
return f"{h:02}:{m:02}:{s:02}" # hh:mm:ss形式の文字列で返す
使い方は、こんな感じです。
start = time.time()
time.sleep(3)
print(elapsed_time_str(time.time() - start))
# 00:00:03
print(elapsed_time_str(12345))
# 03:25:45