web-dev-qa-db-ja.com

Railsで、特定のタイムゾーンで(現在ではなく)特定の時間を作成する最も良い方法は何ですか?

ここに1つの方法がありますが、それはあなたがより良いまたはより「レールシー」な方法を考えることができますか?

>> Time.use_zone('Sydney'){ Time.zone.parse('2011-04-12 2pm') }
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
42
Gabe Hollombe

あなたが探していると思います

Time.find_zone('Alaska').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 AKST -09:00

Time.find_zone('Amsterdam').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 CET +01:00 

Time.find_zone('Sydney').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 EST +11:00  

Time.find_zone('Wellington').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 NZDT +13:00

これは解析でも機能します

Time.find_zone('Sydney').parse('2011-04-12 2pm')
=> Tue, 12 Apr 2011 14:00:00 EST +10:00 
36
toxaq

特定のタイムゾーン内の日付を解析するには、ActiveSupport :: TimeZoneを使用できます

> ActiveSupport::TimeZone["Sydney"].parse("2011-04-12 2pm")
=> Tue, 12 Apr 2011 14:00:00 EST 10:00

TimeZone APIのドキュメントはこちら: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-c-5B-5D

29
Nick Partridge

これは私が使用するものです:

Time.zone.local(2011, 4, 12, 14, 0)
20
James Healy

上記のように、特定のタイムゾーンで時間を作成するには(たとえば、4/10/2014 1:30 pm New York):

@event.start_time = Time.find_zone('Eastern Time (US & Canada)').local(2014,4,10,13,30)
=> Thu, 10 Apr 2014 13:30:00 EDT -04:00 

@event.start_time.utc
=> 2014-04-10 17:30:00 UTC

データベースに保存されると、UTCに変換され(少なくとも移行でタイムスタンプタイプを使用する場合はPostgresで)、将来のアクセス時に、config/application.rbで設定されたアプリケーションのタイムゾーンに関連して表示されます

現地時間を適切に表示するために、データベースにタイムゾーン名(「東部標準時(米国およびカナダ)」など)も保存します。したがって、ビューで時間を印刷する場合は、次のようにします...

@event.start_time.in_time_zone(@event.timezone)
 => Thu, 10 Apr 2014 13:30:00 EDT -04:00 

省略されたタイムゾーン(ESTなど)を取得するには

@event.start_time.in_time_zone(@event.timezone).zone
=> "EDT" 
6
David D.