42

でタイム ゾーンを設定しまし/config/application.rbた。既定で​​は、アプリで生成されるすべての時間はこのタイム ゾーンであると想定していますが、( を使用して) 新しいDateTimeオブジェクトを作成.newすると、 で作成されGMTます。アプリのタイムゾーンに合わせるにはどうすればよいですか?

/config/application.rb

config.time_zone = 'Pacific Time (US & Canada)'

アーブ

irb> DateTime.now
=> Wed, 11 Jul 2012 19:04:56 -0700 

irb> mydate = DateTime.new(2012, 07, 11, 20, 10, 0)
=> Wed, 11 Jul 2012 20:10:00 +0000                    # GMT, but I want PDT

GMT 時間を PDT 時間に変換するだけなので、使用in_time_zoneは機能しません。これは間違った時間です。

irb> mydate.in_time_zone('Pacific Time (US & Canada)')
=> Wed, 11 Jul 2012 13:10:00 PDT -07:00               # wrong time (I want 20:10)
4

6 に答える 6

37

ActiveSupport のTimeWithZone ( Time.zone) オブジェクトを使用して、アプリケーションのタイム ゾーンで日付を作成および解析できます。

1.9.3p0 :001 > Time.zone.now
 => Wed, 11 Jul 2012 19:47:03 PDT -07:00 
1.9.3p0 :002 > Time.zone.parse('2012-07-11 21:00')
 => Wed, 11 Jul 2012 21:00:00 PDT -07:00 
于 2012-07-12T02:49:56.443 に答える
12

文字列解析を行わない別の方法:

irb> Time.zone.local(2012, 7, 11, 21)
=> Wed, 07 Nov 2012 21:00:00 PDT -07:00
于 2014-04-22T22:00:12.347 に答える
2

これは、タイムゾーンを含めることで DateTime クラスでも実現できます。

2.5.1 :001 > require 'rails'
 => true
2.5.1 :002 > mydate = DateTime.new(2012, 07, 11, 20, 10, 0)
 => Wed, 11 Jul 2012 20:10:00 +0000
2.5.1 :003 > mydate = DateTime.new(2012, 07, 11, 20, 10, 0, "PST")
 => Wed, 11 Jul 2012 20:10:00 -0800

また

https://docs.ruby-lang.org/en/2.6.0/DateTime.html

2.6.0 :001 > DateTime.new(2012, 07, 11, 20, 10, 0, "-06")
 => Wed, 11 Jul 2012 20:10:00 -0600
2.6.0 :002 > DateTime.new(2012, 07, 11, 20, 10, 0, "-05")
 => Wed, 11 Jul 2012 20:10:00 -0500
于 2019-04-11T20:51:14.673 に答える
0

タイムゾーンをユーザーの時間に設定するために、ApplicationController で次のことを行います。

これがあなたの望むものかどうかわかりません。

class ApplicationController < ActionController::Base
  before_filter :set_timezone
  def set_timezone
    # current_user.time_zone #=> 'London'
    Time.zone = current_user.time_zone if current_user && current_user.time_zone
  end

end
于 2012-07-12T02:22:40.303 に答える