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

计算DateTime与Time的小时差时触发method_missing错误,求修复方法

计算DateTime与Time对象的小时差(修复NoMethodError)

问题场景

现有代码:

pickup_time = DateTime.parse(q[:payload]["pickup_time"])
# => Wed, 24 Apr 2024 00:38:00 +0000 

created_at = q[:created_at]
# => Tue, 23 Apr 2024 03:53:45.874273000 UTC +00:00 

需要计算pickup_time与created_at之间的小时差,执行以下代码时触发错误:

(pickup_time - q[:created_at] / 1.hour)

错误信息:

`method_missing': undefined method `/' for Tue, 23 Apr 2024 03:53:45.874273000 UTC +00:00:Time (NoMethodError)

错误原因

运算优先级错误:代码试图先对created_at(Time类型对象)执行除法操作,但Ruby的Time类并没有定义/方法,因此抛出NoMethodError。

修复方案

正确逻辑是先计算两个时间的差值,再将差值转换为小时单位,以下是两种可行写法:

1. Rails环境下写法

利用Rails提供的时长辅助方法1.hour(等价于3600秒):

(pickup_time - created_at) / 1.hour

解释:pickup_time - created_at会返回一个以秒为单位的数值,除以1.hour后得到小时差(结果为浮点数,保留小数部分)。

2. 纯Ruby环境下写法

手动转换时间类型并计算:

(pickup_time.to_time - created_at) / 3600.0

解释:先将DateTime对象pickup_time转为Time类型,相减得到秒数差,除以3600.0(用浮点数确保结果保留小数)得到小时差。

补充:获取整数小时差

如果需要向下取整的整数小时数,可调用floor方法:

((pickup_time - created_at) / 1.hour).floor

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:07:08