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に基づくと、他に方法はないと思います。ただし、面倒な strftime を節約するために Time にモンキー パッチを適用することもできます。

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 に答える