如何更改Rails中Active Record的默认时区?
在我的application.rb
我遇到了以下的评论
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. config.time_zone = 'Eastern Time (US & Canada)'
正如你从上面看到的,我已经将config.time_zone
为EST时间。 但是,仍然在DB中创buildlogging时,看起来datetime
是以UTC格式存储的。
他们在上面的评论中说
…并使活动logging自动转换到此区域…
我怎么能做到这一点,在哪里?
另外,我也会在heroku上部署这个,我希望这个设置继续下去
将以下内容添加到application.rb
config.time_zone = 'Eastern Time (US & Canada)' config.active_record.default_timezone = :local # Or :utc
我决定编译这个答案,因为所有其他人似乎是不完整的。
config.active_record.default_timezone确定在从数据库中提取date和时间时是否使用Time.local(如果设置为:local)或Time.utc(如果设置为:utc)。 缺省值是:utc。 http://guides.rubyonrails.org/configuring.html
如果您想要更改Rails时区,但是继续将Active Record中的Active Record保存在数据库中,请使用
# application.rb config.time_zone = 'Eastern Time (US & Canada)'
如果您想更改Rails时区并在此时区中有Active Record存储时间,请使用
# application.rb config.time_zone = 'Eastern Time (US & Canada)' config.active_record.default_timezone = :local
警告 :在非UTC格式的数据库中保存时间之前,您应该三思而后行,甚至三次。
注意
修改application.rb
之后,不要忘记重新启动Rails服务器。
请记住, config.active_record.default_timezone
只能取两个值
- :本地 (转换为在
config.time_zone
定义的时区) - :utc (转换为UTC)
以下是如何find所有可用的时区
rake time:zones:all
经过痛苦之后,我得出了和佩里院长一样的结论。 config.time_zone = 'Adelaide'
和config.active_record.default_timezone = :local
是获胜组合。 这是我在这个过程中发现的。
在我的情况下(Rails 5),我结束了在我的app/config/environments/development.rb
添加这两行
config.time_zone = "Melbourne" config.active_record.default_timezone = :local
而已! 为了确保墨尔本被正确读取,我在terminal上运行了命令:
bundle exec rake time:zones:all
墨尔本在我所在的时区上市!
如果你想将时区设置为全球UTC,你可以在Rails 4中执行以下操作:
# Inside config/application.rb config.time_zone = "UTC" config.active_record.default_timezone = :utc
一定要重新启动您的应用程序,否则您将看不到更改。
在rails 4.2.2上,转到application.rb
并使用config.time_zone='city'
(例如:'London'或'Bucharest'或'Amsterdam'等)。
它应该工作得很好。 它为我工作。
对于中国用户,只需在config/application.rb
添加两行即可:
config.active_record.default_timezone = :local config.time_zone = 'Beijing'
如果您想要设置本地时间,请在application.rb
添加以下文本
config.time_zone = 'Chennai' # WARNING: This changes the way times are stored in the database (not recommended) config.active_record.default_timezone = 'Chennai'
然后重新启动服务器