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

如何仅用base R从时间字符串提取hms、difftime类的时间?

仅用Base R提取时间并生成带hms+difftime类的对象

当然可以实现,下面提供两种完全基于Base R且不使用format()函数的方案:

方案1:通过时间差构造

先将原始字符串转为POSIXct类型,再计算与当天零点的时间差,最后手动添加hms类(hms对象本质是附加了特定类的difftime):

# 示例输入
x <- "2021-09-13T16:40"

# 转换为POSIXct对象
dt <- as.POSIXct(x, format = "%Y-%m-%dT%H:%M")

# 计算与当天零点的时间差,得到difftime对象
time_diff <- dt - as.POSIXct(trunc(dt, "day"))

# 添加hms类
class(time_diff) <- c("hms", "difftime")

此时time_diff的类为c("hms", "difftime"),输出显示为16:40:00,同时支持difftime的所有运算。

方案2:直接拆分字符串构造

如果不想依赖日期时间解析,可直接拆分字符串提取时间部分,再转换为秒数后构造目标对象:

# 示例输入
x <- "2021-09-13T16:40"

# 拆分字符串提取时间部分
time_str <- strsplit(x, "T")[[1]][2]

# 拆分时分并转换为总秒数
time_parts <- as.integer(strsplit(time_str, ":")[[1]])
total_secs <- time_parts[1] * 3600 + time_parts[2] * 60

# 构造带指定类的对象
time_obj <- structure(
  total_secs,
  class = c("hms", "difftime"),
  units = "secs"
)

验证对象类:

class(time_obj)
# 输出:[1] "hms"      "difftime"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:40:29