无需登录 数据私有 本地保存

ISO 8601持续时间解析器 - PnYnMnDTnH等可读化

12
0
0
0

ISO 8601 持续时间解析器

解析 PnYnMnDTnHnMnS 格式的 ISO 8601 持续时间,转换为人类可读的友好文本

在上方输入 ISO 8601 持续时间,自动解析
快速示例(点击填充):
P1Y2M3DT4H5M6S PT1H30M P2DT12H P1Y PT45.5S P3M15D P0.5Y PT8H P1W
✅ 已复制到剪贴板
常见问题 & 知识点
什么是 ISO 8601 持续时间格式?
ISO 8601 是国际标准化组织制定的日期和时间表示标准。其中的持续时间(Duration)格式用于表示一段时间长度,格式为 P[nY][nM][nD][T[nH][nM][nS]]。P 代表"Period(期间)",T 分隔日期部分和时间部分。例如 P1Y2M3DT4H5M6S 表示 1年2个月3天4小时5分钟6秒。这种格式广泛应用于API数据交换、配置文件、日志记录和调度系统(如Kubernetes的Pod持续时间配置)。
PnYnMnDTnHnMnS 中每个字母代表什么?
P = Period,表示这是一个持续时间段的开始(必须);Y = Years(年);M = Months(月,在T之前)或 Minutes(分钟,在T之后);D = Days(天);T = Time,分隔日期和时间部分(当有时间部分时必须);H = Hours(小时);S = Seconds(秒)。数字可以是整数或小数,例如 PT1.5H 表示1.5小时(即1小时30分钟)。
为什么月和年不能精确转换为秒数?
因为公历中月份的天数不固定(28-31天),年份也因闰年而不同(365或366天)。ISO 8601 持续时间中的"月"和"年"是名义上的日历单位,而非精确的时间长度。例如 P1M 的具体秒数取决于起始日期——如果是1月则为31天,如果是2月则为28或29天。因此,包含年月时我们只能给出基于平均值的近似换算(1年≈365.25天,1月≈30.44天),实际应用中以具体起始日期为准。
P1W 代表什么?它和其他单位如何换算?
P1W 表示1周,等于7天(P7D)。ISO 8601-1:2019 标准支持周(W)作为持续时间单位。需要注意的是,周(W)不能与年(Y)、月(M)、日(D)同时使用——它们是互斥的。即 P1W 合法,但 P1W1D 不符合规范。本解析器同时支持周和其他日期单位的输入,但建议遵循标准用法。
ISO 8601 持续时间在日常开发中有哪些应用场景?
应用非常广泛:Kubernetes 中 Pod 的 activeDeadlineSeconds 可使用持续时间格式;Javajava.time.DurationPeriod 类原生支持 ISO 8601;Pythonisodate 库和 datetime.timedeltaAPI设计 中传递时间间隔参数;视频/音频 元数据中的时长标记(如YouTube的 PT1H23M45S);定时任务 Cron表达式的补充等。采用标准格式可避免跨系统歧义。
小数持续时间的写法有什么规范?
ISO 8601 允许使用小数点(.)或逗号(,)来表示小数,例如 PT1.5HPT1,5H 都表示1.5小时。但建议优先使用点(.)以保持与大多数编程语言的兼容性。注意:只有最末位的单位可以使用小数,例如 P1.5Y 合法,但 P1.5Y2M 不完全符合规范(尽管某些宽松解析器可能接受)。小数秒非常常见,如 PT3.141S
如何用代码解析 ISO 8601 持续时间?
主流编程语言都有相应支持:JavaScript 可使用正则表达式手动解析或使用 tinyduration 等npm包;Pythonisodate.parse_duration()JavaDuration.parse()(仅支持时间部分)和 Period.parse()(仅支持日期部分);Gotime.ParseDuration()(需注意Go使用略有不同的格式)。正则表达式为:/^P(?:(\d+[.,]?\d*)W|(\d+[.,]?\d*)Y)?(?:(\d+[.,]?\d*)M)?(?:(\d+[.,]?\d*)D)?(?:T(?:(\d+[.,]?\d*)H)?(?:(\d+[.,]?\d*)M)?(?:(\d+[.,]?\d*)S)?)?$/