Ruby:如何在Time对象中获得子午线?

时间:2012-12-19 21:14:04

标签: ruby time

如果我有时间对象:

t = Time.now

我想知道那个时间是上午还是下午,现在我能做到的唯一方法就是:

t.strftime("%p") == "PM"

现在,%p正在从某事进行插值,对吗?还有其他方法可以达到吗?

我问,因为我正在做一些时间格式化我要显示的时间范围如下:

"9:00 AM - 5:00 PM"
"4:00 - 5:30 PM"
"10:15 - 11:45 AM"

现在我必须检查strftime的字符串值,但我更喜欢这样写:

if start_time.am? && end_time.pm? || start_time.pm? && end_time.am?

...而不是我正在做的更冗长的strftime字符串比较。

3 个答案:

答案 0 :(得分:2)

根据http://www.ruby-doc.org/core-1.9.3/Time.html,我不相信有任何其他方式。你可以通过猴子补丁时间为你节省一些乏味的时间,但是:

class Time
  def meridian
    self.strftime('%p')
  end

  def am?
    self.meridian == 'AM'
  end

  def pm?
    self.meridian == 'PM'
  end
end

答案 1 :(得分:1)

没有time.am?那么好,但您可以改用time.hour < 12

答案 2 :(得分:0)

class Time
  def am?
    self.hour.in? (0..12)
  end

  def pm?
    self.hour.in? (13..24)
  end
end