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

已获取时间字符串总秒数,如何计算添加至当前时间的下次运行时间?

简便实现方法来了!

嘿,在Ruby里要把计算好的秒数加到当前时间上,其实超级简单——直接用Time.now加上你的总秒数就行!因为Ruby的Time类原生支持和数值(代表秒数)相加,返回的就是对应的未来时间对象。

不过先提一嘴,你原来的解析时间字符串的代码有点小bug哦:比如当timestr只有单个部分(比如'5s')时,timearr.count是1,你取timearr[2]会拿到nil,虽然nil.to_i是0,但逻辑上不对,应该取timearr[0]才对。而且如果字符串是'15h 5s'这种缺分钟的情况,你的case逻辑也会出错。

我给你优化一下整个流程,既修复bug又更健壮:

第一步:更靠谱的时长解析方法

先写一个通用的解析函数,能处理任意组合的时/分/秒片段:

def parse_duration(timestr)
  total_seconds = 0
  # 拆分每个时间片段,遍历处理
  timestr.split.each do |part|
    value = part.to_i
    # 根据后缀判断是时/分/秒
    case part[-1]
    when 'h' then total_seconds += value * 3600
    when 'm' then total_seconds += value * 60
    when 's' then total_seconds += value
    else raise "无效的时间格式片段:#{part}"
    end
  end
  total_seconds
end

这个方法不管你输入的是'15h'、'37m 5s'还是'15h 5s',都能正确算出总秒数。

第二步:计算下次运行时间

有了总秒数,直接加到当前时间上就搞定了:

def next_run(timestr = '15h 37m 5s')
  duration_secs = parse_duration(timestr)
  # 核心操作:当前时间 + 秒数
  Time.now + duration_secs
end

调用示例

如果你需要格式化输出这个时间,比如转成YYYY-MM-DD HH:MM:SS格式:

puts next_run.strftime("%Y-%m-%d %H:%M:%S")

这样整个流程既简洁又健壮,完美满足你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:04:54