【问题标题】:Ruby next run in X minutesRuby 下一次运行 X 分钟
【发布时间】:2011-09-11 20:18:35
【问题描述】:

我有一个 ruby​​ on rails 应用程序,并且有一个 cron 在后台运行。 cron 作业在 10 分钟每 10 分钟运行一次,所以 9:00、9:10、9:20、9:30 等等。 在我的 rails 应用程序中,我想显示 cron 下次运行的时间。

所以我会说,“Cron 下次运行时间:晚上 9:20”

我只是不知道如何在 ruby​​ 中获得它。

谢谢, 安德鲁

【问题讨论】:

    标签: ruby-on-rails ruby cron


    【解决方案1】:
    def next_10_minutes
      nxt = Time.now+(10-Time.now.min%10).minute
      nxt.strftime("%H:%M")
    end
    
    next_10_minutes
    #=> "00:30"
    

    或者更灵活的猴子补丁

    class Time
      def self.next_10_minutes
        self.now+(10-Time.now.min%10).minute
      end
    end
    
    Time.next_10_minutes.strftime("%H:%M")
    #=> "00:40"
    

    【讨论】:

    • 其实这里的问题是00:40会返回00:40,而应该返回00:50。因此,如果需要,您只需将 1 分钟添加到 current_time 即可。 self.now+(10-(Time.now + 1.minute).min%10).minute
    • 非常好,但您没有显示“X 分钟后的下一次运行”:)
    • 我相信 Andrew 不是一个完全的新手 ;)
    • 无论如何这是个问题:)
    • 非常感谢,这正是我想要的!
    【解决方案2】:

    这很简单:

    • 获取当前分钟数:min = DateTime.now.min
    • 四舍五入到最后十分钟:

      nextTick = ((min/10.0).ceil*10)
      
    • 打印差异:

      diff = nextTick - min
      hour = DateTime.now.hour
      if nextTick == 60
          nextTick = 0
          hour = (hour + 1) % 24
      end
      print "Next run in #{diff} minutes (at #{hour}:#{nextTick})"
      

    在这里试试:http://codepad.org/5vxlg6kF

    【讨论】:

    • Rails 不需要require 'date'
    【解决方案3】:
    def next_tick(now)
        min10 = ((now.min / 10) + 1)*10
        if min10 == 60
            Time.mktime(now.year, now.month, now.day, now.hour + 1, 0)
        else
            Time.mktime(now.year, now.month, now.day, now.hour, min10)
        end
    end
    
    p next_tick(Time.now)
    

    【讨论】:

      猜你喜欢
      • 2014-11-02
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2019-11-04
      • 2014-12-01
      • 2019-11-10
      相关资源
      最近更新 更多