在Rails中计算两个时间戳(字符串)的小时差值
计算两个ISO8601格式时间的小时差值(Ruby 2.7.5 + Rails 4.2.11)
核心思路
你不需要用strftime解析时间(strftime是格式化时间为字符串的工具,不是解析字符串为时间对象的方法),直接用Ruby/Rails内置的时间解析方法即可,步骤如下:
- 把哈希中的ISO8601时间字符串转换成
Time对象 - 获取当前UTC的
Time对象(不用转成字符串再解析,直接用时间对象计算更高效) - 两个时间对象相减得到秒数差值,再除以3600转换成小时数
完整代码示例
# 假设你的哈希结构如下 time_hash = { "Time" => "2022-11-08T22:59:00Z" } # 解析哈希中的时间字符串为Time对象(Rails环境推荐用Time.zone.parse,适配时区) target_time = Time.zone.parse(time_hash["Time"]) # 纯Ruby环境可改用:target_time = Time.parse(time_hash["Time"]) # 获取当前UTC时间的Time对象 current_utc_time = Time.now.utc # 计算小时差值:(目标时间 - 当前时间) ÷ 3600秒/小时 hour_difference = (target_time - current_utc_time) / 3600.0 # 可选:如果需要整数小时,可做取整处理 # hour_difference = (target_time - current_utc_time).to_i / 3600
关键说明
Time.parse/Time.zone.parse可以直接识别ISO8601格式(带Z表示UTC时区),无需手动拆分时间字段- 两个
Time对象相减的结果是秒数差值,除以3600即可得到小时数;用3600.0而不是3600是为了保留小数部分(比如差值为90分钟时,得到1.5小时) - Rails 4.2中
Time.zone.parse会自动适配项目的时区设置,比纯Ruby的Time.parse更符合Rails开发规范
内容的提问来源于stack exchange,提问作者Priyanshu0007
相关产品推荐
相关产品推荐

