【问题标题】:Current time calculations in rubyruby 中的当前时间计算
【发布时间】:2017-02-27 13:02:30
【问题描述】:

我需要确定当前时间并让用户知道是时候执行特定任务了。例如,如果时间介于几个小时之间(例如,早上 6 点到下午 12 点之间),则用户应该执行某个任务。如果时间在那之后(下午 1 点到 6 点之间),用户应该执行另一项任务,如果时间超出这些时间,他们应该执行其他任务。

我对 ruby​​ 的了解还不够,无法发布我迄今为止编写的代码示例。我所知道的是如何使用 t = Time.now 确定当前时间以及如何确定时间是否在某些小时之间,我不知道如何将其放入确定小时是否为在给定时间之间告诉用户执行任务。

任何帮助表示赞赏。

【问题讨论】:

    标签: ruby time


    【解决方案1】:

    首先,熟悉usage of Time class in ruby

    当您熟悉它时,您会发现进行如下比较非常简单。

    2.3.1 :001 > n = Time.now.hour
     => 17 
    2.3.1 :002 > n.between? 13, 18 #1 pm - 6 pm
     => true 
    2.3.1 :004 > n.between? 6, 12
     => false 
    

    注意:中间来自Comparable模块

    你可以从下面的 sn-p 开始。

    2.3.1 :001 > def task_for_night
    2.3.1 :002?>   puts "night task started"
    2.3.1 :003?>   end
     => :task_for_night 
    2.3.1 :004 > def task_for_day
    2.3.1 :005?>   puts "day time"
    2.3.1 :006?>   end
    2.3.1 :021 > def assign_task
    2.3.1 :022?>   (Time.now.hour.between? 6,12) ? task_for_night : task_for_day
    2.3.1 :023?>   end
     => :assign_task 
    2.3.1 :024 > assign_task
    day time
     => nil 
    

    【讨论】:

    • 感谢只学习了 ruby​​ 2 周,不知道如何玩弄时间,这对我有很大帮助
    【解决方案2】:

    caseranges 是您想要做的完美语法:

    case Time.now.hour
    when (6..12)
      puts "Task A"
    when (13..18)
      puts "Task B"
    else
      puts "Free time"
    end
    

    【讨论】:

    • 啊,我迟到了 :( +1 from me :)
    【解决方案3】:

    你也可以使用#case

    def what_should_i_do_now?
      case Time.now.hour
      when 6..12 then 'Do morning task'
      when 13..18 then "Do afternoon's task"
      else "Do something else"
      end
    end
    

    现在您可以做的更多:

    def what_should_i_do_at(time)
      case time.hour
      when 6..12 then 'Do morning task'
      when 13..18 then "Do afternoon's task"
      else "Do something else"
      end
    end
    
    > what_should_i_do_at(Time.now+60*60) # plus 1 hour
    #=> "Do afternoon's task" 
    

    【讨论】:

      【解决方案4】:

      获取当前时间(仅小时:%H)并将其转换为整数。

      time = Time.now.strftime('%H').to_i
      # 15
      

      并检查嵌套三元运算符(条件运算符)中的时间条件

      (time.between? 6,12) ? "Do morning's task" : (time.between? 13,18) ? "Do afternoon's task" : "Do something else"
      
      # Do afternoon's task
      

      【讨论】:

      • 没有。 time 不是时间,是一个小时。无需将时间转换为字符串到 int,只需使用Time.now.hour。最后,不要使用双三元组,它很难阅读。
      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多