如何仅用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
相关产品推荐
相关产品推荐

