ISO 8601表記の時間を(PT18M17S)を「◯秒」や「◯分◯秒」に変換する方法。

Youtube APIの再生時間などを取得すると「PT18M17S」という表記で出力されます。

少しデータの表記を加工したかったので、変換方法をまとめておきます。

やりたいこと

PT18M17Sを「1097秒」や「18分17秒」といった表記に変換したい。

duration = "PT18M17S"  # 18分17秒

⑴「.replace()」を使って変換

duration = "PT18M17S"

time = duration.replace('PT','').replace('H','時間').replace('M','分').replace('S','秒')
print(time)

# 18分17秒

⑵ ライブラリ「isodate」を使って変換

$ pip install isodate
import isodate

duration = "PT18M17S"

td = isodate.parse_duration(duration)
seconds = td.total_seconds()
print(seconds)

# 1097.0

秒数から「XX:XX:XX」表記に変換する

import datetime

# 「x(秒)」から「x:xx:xx」形式に変更
def get_time(td):
    m, s = divmod(td.seconds, 60)
    h, m = divmod(m, 60)
    if h == 0:  # 1時間未満であれば時間表記は省略
        return f'{m}:{s}'
    return f'{h}:{m}:{s}'

td = datetime.timedelta(seconds=1097.0)
time = get_time(td)
print(time)

# 18:17

おまけ:ISO 8601表記の意味

P[n]Y[n]M[n]DT[n]H[n]M[n]S

「P」は期間を表して、「T」は時間を表しています。

P期間」を表す指定子
◯Y
◯M
◯D
T時間」を表す指定子
◯H時間
◯M
◯S

コメントを残す

*