4

如果我有一个时间对象:

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...而不是我现在正在做的更冗长的字符串比较。

4

3 回答 3

3

基于http://www.ruby-doc.org/core-1.9.3/Time.html,我不相信还有其他方法。您可以使用猴子补丁 Time 来节省一些乏味的 strftime,但是:

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

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

  def pm?
    self.meridian == 'PM'
  end
end
于 2012-12-19T21:18:57.440 回答
1

没有什么比这更好的了,time.am?但你可以用它time.hour < 12来代替。

于 2012-12-19T21:18:19.860 回答
0
class Time
  def am?
    self.hour.in? (0..12)
  end

  def pm?
    self.hour.in? (13..24)
  end
end
于 2012-12-19T21:21:43.230 回答