【问题标题】:How to make time return morning or afternoon如何让时间回到早上或下午
【发布时间】:2016-05-11 12:19:24
【问题描述】:

我一直在尝试根据一天中的时间输出MorningAfternoon。我把时间变成了一个字符串,并试图与它进行比较。这是我所拥有的:

t = Time.now
# => 2016-05-11 07:18:10 -0500
if t.to_s >= '12:00'
  'Good afternoon'
else
  'Good morning'
end
# => "Good afternoon"

默认为"Good afternoon"。为什么是这样?是因为 Ruby 将时间设置为 24 小时制吗?还是代码中的东西?

【问题讨论】:

  • 为什么将它们作为字符串进行比较?
  • @sawa 不管我做了什么,为什么不继续呢?
  • 还有“我所做的一切都奏效了,那为什么不去做呢?”我们都开始了我们的遗忘之旅。
  • @ReggieB 如果它有效,它就有效,那么在它完成之前接受它有什么问题,并在它最终完成时让它变得更好......?
  • 前导零,字典顺序对应时间顺序。

标签: ruby time


【解决方案1】:

您不需要任何字符串操作:

t = Time.now
# => 2016-05-11 20:26:11 +0800
t.hour
# => 20

只需将其hour(整数)与12 进行比较。

【讨论】:

    【解决方案2】:

    您正在比较字符串 - 这不会给您预期的结果。

    Time.now.to_s 输出如下字符串:“2016-05-11 13:27:43 +0100”。当您将其与“12:00”进行比较时,这是字符串中字母的比较,而不是它们所代表的时间。

    试试这个:

    t = Time.now
    
    if t.strftime('%P') == 'pm'
      'Good afternoon'
    else
      'Good morning'
    end
    

    strftime 的文档:http://ruby-doc.org/core-2.3.1/Time.html#method-i-strftime

    【讨论】:

      【解决方案3】:
      require 'time'
      
      t = Time.new
      puts "Good %s" % [(t.to_i/43199).even? ? "morning" : "afternoon"]
      Good morning
      
      t += 43199
      puts "Good %s" % [(t.to_i/43199).even? ? "morning" : "afternoon"]
      Good afternoon
      

      注意:43199 = 12*60*60/2 - 1

      只是说说而已。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        • 2013-06-04
        • 2018-07-06
        • 1970-01-01
        相关资源
        最近更新 更多