如何使用lubridate将period类型时间差舍入到最近分钟
lubridate将period类型时间差舍入到分钟的方法
你可以根据自己的需求选择截断秒或者四舍五入到最近分钟两种处理逻辑:
方法1:直接截断秒部分(直接移除秒,不做进位)
这种方式会直接丢弃秒数值,无论秒数是否大于等于30都不会触发分钟进位,刚好匹配你示例中"2H 13M 9S"转"2H 13M"的需求:
library(lubridate) time_1 <- ymd_hms("2021-01-01 12:12:36") time_2 <- ymd_hms("2021-01-01 14:25:45") time_diff <- seconds_to_period(difftime(time_2, time_1, units = 'sec')) # 直接将period的秒属性设为0即可 time_diff$seconds <- 0 # 打印验证,输出为 "2H 13M" print(time_diff)
方法2:四舍五入到最近分钟
如果需要根据秒数判断是否进位(秒≥30则分钟+1,秒<30则丢弃秒),可以先把period转成总秒数做舍入后再转回period:
library(lubridate) time_1 <- ymd_hms("2021-01-01 12:12:36") time_2 <- ymd_hms("2021-01-01 14:25:45") time_diff <- seconds_to_period(difftime(time_2, time_1, units = 'sec')) # 总秒数四舍五入到60的倍数,再转period total_seconds <- period_to_seconds(time_diff) rounded_seconds <- round(total_seconds / 60) * 60 time_diff_rounded <- seconds_to_period(rounded_seconds) # 打印验证,示例中9秒<30,输出还是 "2H 13M" print(time_diff_rounded)
补充说明
如果后续需要格式化输出为其他字符串格式,可以用format()方法自定义,比如输出为HH:MM格式:
format(time_diff, "%H:%M") # 输出为 "02:13"
内容的提问来源于stack exchange,提问作者SiH
相关产品推荐
相关产品推荐

