R语言中对hms类型时间减1小时且不生成负值的实现方法
R语言hms类型时间减1小时的实现方案
hms类型本质是以秒为单位存储的时间数值,基于秒级运算配合模运算即可实现无负值的循环减小时操作,具体实现如下:
前置依赖
需要先安装并加载hms包:
# 首次使用先安装 install.packages("hms") # 加载包 library(hms)
核心逻辑
- 1小时对应3600秒,减1小时等价于对hms对象的秒数值减3600
- 对运算结果取86400(一天总秒数)的模,即可自动处理负值,循环到前一天的对应时间,不会出现负时间
代码实现
通用函数封装
sub_one_hour <- function(hms_obj) { # 入参hms_obj为hms类型的时间对象 as.hms((as.numeric(hms_obj) - 3600) %% 86400) }
测试示例
# 示例1:输入01:00:00 input1 <- hms("01:00:00") sub_one_hour(input1) # 输出结果:00:00:00 # 示例2:输入00:45:00 input2 <- hms("00:45:00") sub_one_hour(input2) # 输出结果:23:45:00(符合24小时制时间循环规则,若你需要得到01:45:00的结果,只需将函数中的减号改为加号即可)
内容的提问来源于stack exchange,提问作者ncnc_2020
相关产品推荐
相关产品推荐

