ISO 8601 期間パーサー|PnYnMnDTnHnMnS を秒・分・時間へ換算
P1Y6M14DT12H30M45S や PT1H30M、週形式 P1W といった ISO 8601 の期間文字列を、合計秒・ミリ秒・分・時間へ一度に換算するパーサー。年/月/日/時/分/秒の各要素を分解し、人間が読める表現も同時に並べる。
💡 このツールについて
cron や Kubernetes の liveness probe、OpenAPI の format: duration、RFC3339 系の API を触っていると、PT30M や P3DT4H のような文字列が突然出てくる。読み方は分かっても「これ結局何秒なんだ?」を暗算するのは地味に面倒で、Y/M/D の単位境界を間違えると桁がずれる。
このパーサーは文字列をそのまま貼り付けるだけで、合計秒数とミリ秒、分、時間を 4 枚のカードに同時表示する。さらに Y・M・D・H・M・S の 6 成分に分解し、P の直後が日付部、T の後ろが時刻部という ISO 8601 の構造をそのまま目で追える。年・月をまたぐ期間は「1 年 = 365 / 365.25 / 366 日」を切り替えて近似換算できるので、うるう年込みの概算と平年ベースの概算を即座に見比べられる。
🧐 よくある質問
Q. P1Y の「1 年」は何秒として計算されますか?
選んだ「1 年の日数」基準で決まる。365 日なら 31,536,000 秒、365.25 日なら 31,557,600 秒。月は「1 年 ÷ 12」で近似する。
Q. なぜ月や年は「近似」なのですか? ISO 8601 の期間は暦に依存しない名目値で、実際の 1 ヶ月は 28〜31 日と幅がある。特定の開始日からの厳密な差分が必要なら、日付計算 (カレンダー演算) を使う必要がある。
Q. P1W のような週形式も使えますか?
使える。P1W は 7 日 = 604,800 秒として換算する。ただし週形式は単独で書く決まりで、P1Y2W のように他の指定子と混在させることはできない。
Q. 小数は入力できますか?
できる。PT1.5H (1.5 時間) や PT0.5S のように小数点 (またはカンマ) を含む値も解釈する。
Q. 負の期間 (-PT1H など) は扱えますか?
本ツールでは扱わない。負符号で始まる文字列はエラーになる。
Q. T を付け忘れるとどうなりますか?
P1M は「1 ヶ月」、PT1M は「1 分」と区別される。M は日付部では月、時刻部では分を表すため、分を意図するなら必ず T の後ろに書く。
📚 ISO 8601 期間表記の豆知識
ISO 8601 の期間 (duration) は、特定の時点ではなく「長さ」だけを表すために P (Period) で始まる。T は時刻部の区切りで、これが無いと M が月か分か判別できない——P1M と PT1M の違いはここから生まれる。
開発現場では、スケジューラのインターバル指定や CI のタイムアウト、動画メタデータ (YouTube Data API の contentDetails.duration は PT4M13S 形式) など、地味に登場頻度が高い。「30 分」を PT30M と書くか PT0.5H と書くかは自由だが、機械可読性を優先して整数の最小単位で揃える運用が多い。日本国内の業務システムでも、海外製ミドルウェアの設定値が ISO 8601 期間で渡ってくる場面は増えており、合計秒への換算を一手で済ませられると設定ミスの確認が速い。