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

为何lubridate中hm(7.4)与hm(7.04)均返回7H 4M 0S?

解决lubridate中hm()函数解析数值时分的异常问题

问题原因

lubridate::hm()函数的核心作用是解析带时分格式的字符串(比如"7:40"、"7h40m"、"7.40"),而非将数值的小数部分按比例转换为分钟。当你传入数值7.4或7.04时,它们会先被自动转换为字符串"7.4"和"7.04",hm()会将小数点视为小时与分钟的分隔符,因此:

  • "7.4"被解析为7小时4分钟
  • "7.04"同样被解析为7小时4分钟(小数点后两位的前导零不影响分钟数解析)

这并非函数异常,而是参数格式不符合hm()的设计预期。

解决方案

根据你的需求(将7.4对应为7小时40分钟),分两种场景处理:

场景1:输入是「小时的小数形式」(如7.4小时 = 7小时 + 0.4×60分钟)

直接通过数值计算转换为时分格式:

library(lubridate)

# 方法1:拆分小时和分钟后构造hms对象
hms(hours = floor(7.4), minutes = (7.4 - floor(7.4)) * 60)
# 输出:"7H 40M 0S"

# 方法2:用duration转换后转为hms格式
as_hms(duration(hours = 7.4))
# 输出:"7H 40M 0S"

场景2:输入是「时分的小数分隔写法」(如想表达7:40,写成7.40)

直接传入字符串格式的参数,让hm()正确解析:

hm("7.40")
# 输出:"7H 40M 0S"

# 更推荐的标准写法
hm("7:40")
# 输出:"7H 40M 0S"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:50:07