【Python】経過時間をhh:mm:ssフォーマットで表示する

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください