1/10/2011 9:00:00のような日時値がある場合、その日時から午前9:00を取得するにはどうすればよいですか?
strftimeがそれを行います。
t = Time.now
t.strftime("%I:%M%p")
ここに他のすべての属性:
http://www.wetware.co.nz/blog/2009/07/Rails-date-formats-strftime/
DateTime.new(2011,10,1,9).to_s(:time) #=> "09:00"
DateTime.now.to_s(:time) #=> "11:58"
から Time docs
日時から時間で検索する必要がある場合
:conditions => ["created_at::time > ?", "08:30" ]
次のコードを使用して日時から時間を取得します
datetime.strftime("%I:%M %P")
文字列出力だけが必要な場合は、HiteshとChrisがstrftime
で言ったようにできますが、Time
のインスタンスからDateTime
のインスタンスを取得しようとしている場合は、次のようにできます。
Time.parse(DateTime.now.to_s)
"1/10/2011 9:00:00"
のような文字列を解析してTime
のインスタンスを取得したい場合は、同じparse
メソッドを使用できます。
Time.parse("1/10/2011 9:00:00") #=> 2011-10-01 09:00:00 -0500
次の形式に注意してください。Rubyは、日付を解析するときに、米国に適さない形式のd/m/yを使用します。
そのTime
インスタンスから時刻の文字列表現を出力するには、strftime
に戻ります。
うまくいけば、これで問題が解決します。
翻訳あり
I18nを使用する場合、 独自の時間形式を簡単に定義できます
timeオブジェクトを
I18n.l
に渡す時間形式をローカライズするか、(できれば)Railsの#l
ヘルパーを使用します。 :formatオプションを渡すことでフォーマットを選択できます# app/views/home/index.html.erb <h1><%=t :hello_world %></h1> <p><%= flash[:notice] %></p <p><%= l Time.now, format: :short %></p> # config/locales/pirate.yml pirate: time: formats: short: "arrrround %H'ish"
書式設定オプションのリストについては、@ Chris Barrettoの回答を参照してください