今日の日付を取得するには:
Date.today # => Fri, 20 May 2011
特定のタイムゾーンで今日の日付を取得したいのですが、'Melbourne'
と言います。
application.rb
に次の設定があります:
config.time_zone = 'Melbourne'
そして私は設定しました:
Time.zone = 'Melbourne'
各アクションの前にアプリケーションコントローラーで。
しかし、それは役に立ちません(これらの設定はデータベースに保存されている日付にのみ影響するためだと思います)。
'Melbourne'
で今日の日付を取得するにはどうすればよいですか?
これができるはずです:Time.current
。メルボルンの現在の時刻が表示されますTime.zone
に設定されています。
Date
オブジェクトには必ずしもタイムゾーンがありませんが、Time
オブジェクトにはあります。 Time
として試してから、Date
に変換して戻すことができます。
Time.now.to_date
# => Thu, 19 May 2011
Time.now.in_time_zone('Melbourne').to_date
# => Fri, 20 May 2011
そうみたいです Time.zone.today
も機能します。
_Time.zone
_を変更せずに、指定されたタイムゾーンで「今日」を取得したい場合は、fl00rやDylan Markowのようなことをします。
_Time.now.in_time_zone('Melbourne').to_date
_
またはこれ:
_Time.find_zone!('Melbourne').today
_
タイムゾーンの "今日" Date
を取得するのをさらに簡単にする少しのヘルパーメソッド_Date.today_in_zone
_を作成しました。
_ # Defaults to using Time.zone
> Date.today_in_zone
=> Fri, 26 Oct 2012
# Or specify a zone to use
> Date.today_in_zone('Melbourne')
=> Sat, 27 Oct 2012
_
Time.find_zone!('Melbourne').today
...より少し読みやすいと思います...
これを使用するには、これを_'lib/date_extensions.rb'
_や_require 'date_extensions'
_などのファイルにスローします。
_class Date
def self.today_in_zone(zone = ::Time.zone)
::Time.find_zone!(zone).today
end
end
_
DateTime
クラスを使用
DateTime.now.in_time_zone 'Melbourne'
有効なタイムゾーン名については、チェックアウト: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
Ruby-1.9.2-p0 :004 > Time.now
=> 2011-05-19 15:46:45 +0100
Ruby-1.9.2-p0 :006 > Time.now.in_time_zone('Melbourne')
=> Fri, 20 May 2011 00:47:00 EST +10:00
Ruby-1.9.2-p0 :007 > Time.now.in_time_zone('Melbourne').to_date
=> Fri, 20 May 2011
Rails 3では、Dateオブジェクトでto_time_in_current_zoneを呼び出すだけでこれを実行できます。
Date.today.to_time_in_current_zone