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天之间变化。归根结底,本工具在涉及年、月的换算时不得不采用近似值,原因正在于此。