如何让lubridate的hms()保留0开头小时数?避免datetime解析失败
在lubridate中保留hms对象的0小时显示
当用hms("00:32:40")处理时间字符串时,lubridate会自动省略值为0的小时单位,只输出32M 40S,这会导致后续拼接datetime时解析失败。这里提供两种实用解决方法:
方法一:用format()强制指定显示格式
通过format()函数定义输出格式,强制显示小时、分钟、秒三个单位:
library(lubridate) # 解析时间字符串 time_obj <- hms("00:32:40") # 格式化输出,保留0小时 formatted_time <- format(time_obj, format = "%HH %MM %SS") # 输出结果:"00H 32M 40S"
之后拼接datetime就可以正常解析:
datetime_str <- paste("2022-09-13", formatted_time) ymd_hms(datetime_str) # 输出:2022-09-13 00:32:40 UTC
方法二:手动提取时间单位拼接
直接提取hms对象的小时、分钟、秒数值,手动拼接成目标格式:
time_obj <- hms("00:32:40") manual_formatted <- paste0(hour(time_obj), "H ", minute(time_obj), "M ", second(time_obj), "S") # 输出结果:"0H 32M 40S"
这种方式更灵活,适合需要自定义格式的场景。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

