ISO 8601 時間段(Duration)轉換工具

將ISO 8601時間段表示法(如PT1H30M)與秒數相互轉換。可用於解析YouTube API、AWS超時設定、播客RSS訂閱源等場景中使用的時間段格式,適合開發者使用。

ISO 8601 時間段表示法常見示例

ISO 8601時間段以"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格式外,itunes:duration標籤有時也會使用ISO 8601時間段格式。

常見問題

PT1H30M是ISO 8601時間段表示法,表示"1小時30分鐘"。"P"標誌著時間段的開始,"T"標誌著時刻部分(時、分、秒)的開始——這一點很重要,因為沒有"T"時"1M"表示"1個月",而"T"之後的"1M"則表示"1分鐘"。

典型例子包括YouTube Data API的影片時長欄位(contentDetails.duration)、AWS和Google Cloud等雲服務的超時與有效期設定、以及播客RSS訂閱源(itunes:duration)。許多程式語言也支援解析和生成該格式,例如Java的Duration/Period類、Python的isodate庫等。

一年可能是365天或366天(取決於是否為閏年),一個月的天數也在28天到31天之間變化,因此兩者都不存在固定的秒數。本工具將365.25天作為一年的實用平均近似值(其十二分之一,約30.44天,作為一個月)。如果需要精確結果,建議使用"精確值"模式,僅用天、時、分、秒來表示時間段。

是的,本工具支援"P2W"(2周)這樣的W表示法。但需要注意,根據ISO 8601規範,W表示法是一種獨立的簡寫形式,不能與年月日或時刻部分組合使用。

如果輸入不以"P"開頭、單位順序不符合年→月→日、"T"之後時→分→秒的規則,或者所有單位都被省略(空時間段),本工具會判定為無法轉換,並顯示錯誤提示而非結果。
ツールくん

閒話 ― 計算機世界為何需要專門的"時間段"格式

ISO 8601以統一表示日期和時間的國際標準而廣為人知,但同一標準中其實也定義了"時間段(Duration)"的表示法——即兩個時間點之間的長度,而非某個具體的時間點。日期時間回答的是"何時",而時間段回答的是"多久",兩者看似相似,實則代表著性質完全不同的資訊。正是為了明確區分這一點,才有了以"P"開頭的專用記法。

時間段表示法在實踐中備受青睞的原因之一,是它能夠防止系統間資料交換時因單位理解不一致而產生的錯誤。例如,如果API響應只返回數字"30",呼叫方就必須查閱文件才能確定這是秒還是分鐘。而使用"PT30S"時,數值與單位被打包在同一個字串中,只要解析實現正確,就不可能產生誤解。

YouTube Data API之所以用ISO 8601格式返回影片時長,原因也在於此:"PT4M13S"這樣的字串能明確無誤地表示一段4分13秒的影片。AWS、Google Cloud等雲平臺的超時與有效期設定有時也採用相同的格式,如果在YAML配置檔案或JSON響應中看到這種記法,用本工具換算成秒數會更容易理解其實際含義。

與此同時,這一標準也有一個有趣的特性:包含年、月的時間段並不具有固定的絕對長度。同樣是"P1Y",是否跨越閏年會導致實際天數在365天與366天之間變化。歸根結底,本工具在涉及年、月的換算時不得不採用近似值,原因正在於此。