ISO 8601 期間(Duration)変換ツール
ISO 8601の期間表記(例: PT1H30M)と秒数を相互変換します。YouTube APIの動画長やAWSのタイムアウト設定、ポッドキャストのRSSフィードなどでも使われるこの期間形式を、素早く解読・生成できる開発者向けの無料ツールです。
ISO 8601 期間表記の代表例
ISO 8601の期間(Duration)表記は「P」に続けて年・月・日を、「T」に続けて時・分・秒を並べる形式です。以下は代表的な表記とそれが表す秒数の対応表です。
| 期間表記 | 合計秒数 | 備考 |
|---|---|---|
| PT30S | 30 | 30秒間のタイムアウトなど、短い時間指定の代表例 |
| PT1H30M | 5,400 | 1時間30分。映画の上映時間やYouTube動画の長さを表す際によく使われる形式 |
| P1D | 86,400 | 1日(24時間)。サーバーログの保持期間やキャッシュの有効期限指定に使われる |
| P3Y6M4DT12H30M5S | 110,842,205 | 3年6ヶ月4日12時間30分5秒に相当する複合表記の例(年・月は365.25日/年の近似値で換算) |
使い方のヒント
- 年・月を含む期間は、実際には暦によって日数が変動するため、本ツールでは1年=365.25日、1ヶ月=30.44日という固定の近似値で秒数に換算しています。
- 秒数から期間文字列を生成する際、「日時分秒のみ」モードを選ぶと年・月の近似を一切使わず、うるう年等の誤差がない厳密な表記が得られます。
- YouTube Data APIの動画情報(contentDetails.duration)はISO 8601形式で返されるため、本ツールにそのまま貼り付けて秒数に変換できます。
- AWS Lambda・API Gatewayなどクラウドサービスのタイムアウト設定にISO 8601期間表記が使われる場合があり、設定値の検証に便利です。
- ポッドキャストのRSSフィードで音声の長さを表す際、hh:mm:ss形式に加えてISO 8601期間形式が使われることがあります。
よくある質問
余談ですが ― なぜコンピューターの世界に「期間」を表す専用フォーマットがあるのか
ISO 8601は本来「日時」を国際的に統一したフォーマットで表すための規格として知られていますが、実は「期間(Duration)」、つまり2つの時点の間の長さを表す記法も同じ規格の中で定義されています。日時が「いつなのか」という1点を指すのに対し、期間は「どれだけの長さか」という差分の情報であり、両者は似ているようで扱うべき情報の性質がまったく異なります。この違いを明確にするために、期間専用の"P"から始まる記法が用意されました。
期間表記が実務で重宝される理由の1つは、プログラム間でデータをやり取りする際に、単位の解釈違いによるバグを防げる点にあります。例えば「30」という数値だけをAPIレスポンスに含めた場合、それが秒なのか分なのかは呼び出し側が別途ドキュメントを確認しない限り分かりません。一方"PT30S"であれば、値と単位が1つの文字列にセットで含まれているため、パースする側の実装が正しければ解釈を誤りようがありません。
YouTube Data APIが動画の長さをISO 8601形式で返すのも同じ理由です。"PT4M13S"という文字列を見れば、それが4分13秒の動画であることが一意に定まります。同様にAWSやGoogle CloudのAPIでもタイムアウトや有効期限の設定にこの形式が採用されることがあり、クラウドサービスのYAML設定ファイルやJSONレスポンスの中でこの記法を見かけたら、本ツールで秒数に変換して具体的な長さを確認するとイメージが掴みやすくなります。
一方でこの規格には、年・月を含む期間が「絶対的な長さ」を持たないという興味深い性質があります。同じ"P1Y"でも、うるう年をまたぐかどうかで実際の日数が365日にも366日にもなり得るのです。本ツールが年月を含む変換に近似値を使わざるを得ないのも、突き詰めればこの仕様上の曖昧さに起因しています。