如何更改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' 

然后重新启动服务器