You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将lubridate::duration输出的时长转换为ISO8601标准时长格式

解决方案

情况1:持有lubridate的duration原生对象

直接用lubridate内置的format_ISO8601()函数即可完成转换,示例代码:

library(lubridate)
# 生成duration对象
dur <- duration("PT1H3M")
# 转换为ISO8601格式
format_ISO8601(dur)
# 输出结果: "PT1H3M"

情况2:仅持有lubridate打印输出的字符串

如果你的输入只有类似"3780s (~1.05 hours)"的打印字符串,先提取字符串中的秒数,转换为duration对象后再格式化即可,可参考下面的自定义函数:

dur_str_to_iso8601 <- function(dur_print_str) {
  library(lubridate)
  # 提取字符串开头的秒数数值
  second_val <- as.numeric(gsub("^([0-9]+)s.*$", "\\1", dur_print_str))
  # 转换为duration后格式化为ISO8601
  return(format_ISO8601(duration(second_val, unit = "seconds")))
}

# 测试调用
dur_str_to_iso8601("3780s (~1.05 hours)")
# 输出结果: "PT1H3M"

ISO 8601时长格式规则说明

  1. 所有时长标识以大写字母P开头,代表「周期」
  2. 日期维度的单位紧跟在P之后,可用单位包括Y(年)、M(月)、W(周)、D(日)
  3. 时间维度的内容前需要加大写字母T分隔,可用单位包括H(时)、M(分)、S(秒)
  4. 仅包含时间维度的时长不会出现日期单位,示例PT1H3M对应1小时3分钟

内容的提问来源于stack exchange,提问作者karuno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 02:24:06