ISO8601表記の時間から秒単位の時間を取得したいです。
下記はPT%H%M%Sの時・分・秒を表す文字列が入力されたとき、秒に変換するメソッドです。
が、PT12H,PT10M,PT23Sのようなときに先頭の文字だけが計測されてしまいます。
どのように実装すればよろしいでしょうか?
またiso_to_secのような実装でなくとも簡単な実装方法や正規表現がありましたらご教授お願いします。
import re def iso_to_sec(iso): timeDic = {"s": 1, "m": 60, "h": 3600} h = re.findall(r'PT+([0-9]+)H', iso) m = re.findall(r'PT+([0-9]+)M', iso) s = re.findall(r'PT+([0-9]+)S', iso) hm = re.findall(r'PT+([0-9]+)H+([0-9]+)M', iso) hs = re.findall(r'PT+([0-9]+)H+([0-9]+)S', iso) ms = re.findall(r'PT+([0-9]+)M+([0-9]+)S', iso) hms = re.findall(r'PT+([0-9]+)H+([0-9]+)M+([0-9]+)S', iso) isoDic = {"hms": hms, "hm": hm, "hs": hs, "ms": ms, "h": h, "m": m, "s": s} for keys, times in isoDic.items(): if len(times) > 0: res = [] for i, k_time in enumerate(keys): res.append(int(times[0][i]) * timeDic[k_time]) return sum(res) s = iso_to_sec("PT1M23S") print(s) # 83 s = iso_to_sec("PT1H1M23S") print(s) # 3683 s = iso_to_sec("PT23S") print(s) # 2 ←23であってほしい s = iso_to_sec("PT10M") print(s) # 60 ←600であってほしい
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。