1週間2日6時間21分32秒の動画じゃないですか?
Youtube では 222 時間 21 分 17 秒と表示されています。1 * 7 * 24 + 2 * 24 + 6 = 222 ですが、17 秒と 32 秒の不一致がどこから来るのかわかりません。丸め誤差の可能性もあります。
私の考えでは、そのためのパーサーを書くことはそれほど難しくありません。残念ながらdateutil
、間隔を解析するようには見えず、日時ポイントのみを解析します。
アップデート:
このためのパッケージがあるようですが、正規表現の力、簡潔さ、および理解できない構文の例として、ここにパーサーを示します。
import re
# see http://en.wikipedia.org/wiki/ISO_8601#Durations
ISO_8601_period_rx = re.compile(
'P' # designates a period
'(?:(?P<years>\d+)Y)?' # years
'(?:(?P<months>\d+)M)?' # months
'(?:(?P<weeks>\d+)W)?' # weeks
'(?:(?P<days>\d+)D)?' # days
'(?:T' # time part must begin with a T
'(?:(?P<hours>\d+)H)?' # hourss
'(?:(?P<minutes>\d+)M)?' # minutes
'(?:(?P<seconds>\d+)S)?' # seconds
')?' # end of time part
)
from pprint import pprint
pprint(ISO_8601_period_rx.match('P1W2DT6H21M32S').groupdict())
# {'days': '2',
# 'hours': '6',
# 'minutes': '21',
# 'months': None,
# 'seconds': '32',
# 'weeks': '1',
# 'years': None}
ここでは、これらのデータから正確な秒数を意図的に計算していません。些細なことに見えますが (上記参照)、実際にはそうではありません。たとえば、1 月 1 日から 2 か月の距離は、年によって 58 日 (30+28) または 59 (30+29) ですが、3 月 1 日からは常に 61 日です。適切なカレンダーの実装では、これらすべてを考慮に入れる必要があります。Youtube クリップの長さを計算するには、長すぎる必要があります。