如何在Rails中更改Active Record的默认时区?

时间:2011-05-25 02:03:39

标签: ruby-on-rails ruby timezone rails-activerecord

在我的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时间。但是,仍然在数据库中创建记录时,看起来datetime以UTC格式存储。

在上面的评论中,他们说

  

...并将Active Record自动转换为此区域...

我该怎么做,在哪里?

另外,我也将在heroku上部署这个,我希望设置继续

10 个答案:

答案 0 :(得分:171)

将以下内容添加到application.rb作品

 config.time_zone = 'Eastern Time (US & Canada)'
 config.active_record.default_timezone = :local # Or :utc

答案 1 :(得分:160)

我决定编写这个答案,因为其他所有答案似乎都不完整。

  

config.active_record.default_timezone 确定从数据库中提取日期和时间时是否使用Time.local(如果设置为:local)或Time.utc(如果设置为:utc)。默认值为:utc。   http://guides.rubyonrails.org/configuring.html

如果您想更改 Rails 时区,但继续在 UTC 中保存 Active Record 保存在数据库中,请使用

# application.rb
config.time_zone = 'Eastern Time (US & Canada)'

如果您想在此时区更改 Rails 时区 AND 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)

以下是查找所有可用时区的方法

rake time:zones:all

答案 2 :(得分:34)

在经历了多次痛苦之后,我得到了与佩里院长相同的结论。 config.time_zone = 'Adelaide'config.active_record.default_timezone = :local是获胜组合。这是过程中的what I found

答案 3 :(得分:19)

就我而言(Rails 5),我最终在 /* Start Critical Section */ my_q.size++; list_add_tail(&msg->node, &my_q.head); /* End Critical Section */ return 0; }

中添加了这两行
app/config/environments/development.rb

就是这样!为了确保正确读取墨尔本,我在终端中运行命令:

config.time_zone = "Melbourne" config.active_record.default_timezone = :local

墨尔本正在我所在的时区上市!

答案 4 :(得分:9)

如果要将时区全局设置为UTC,可以在Rails 4中执行以下操作:

# Inside config/application.rb
config.time_zone = "UTC"
config.active_record.default_timezone = :utc

请务必重新启动您的应用程序,否则您将无法看到更改。

答案 5 :(得分:3)

在导轨4.2.2上,转到application.rb并使用config.time_zone='city'(例如:'伦敦'或布加勒斯特'或'阿姆斯特丹&# 39;等等。)

它应该工作得很好。它对我有用。

答案 6 :(得分:2)

我必须将此块添加到我的environment.rb文件中,一切都很顺利:)

Rails.application.configure do
    config.time_zone = "Pacific Time (US & Canada)"
    config.active_record.default_timezone = :local
end
  • 我在行<{1}}
  • 之前添加了

答案 7 :(得分:0)

对于中国用户,只需在下方添加两行config/application.rb

config.active_record.default_timezone = :local
config.time_zone = 'Beijing'

答案 8 :(得分:0)

在Ruby on Rails 6.0.1中,转到 config > 区域设置> application.rb 和grego siguiente:

require_relative 'boot'

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module CrudRubyOnRails6
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.0

    config.active_record.default_timezone = :local
    config.time_zone = 'Lima'

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
  end
end

您可以看到我正在用2行配置时区:

config.active_record.default_timezone =: local
config.time_zone = 'Lima'

我希望它对使用Ruby on Rails 6.0.1的人有所帮助

答案 9 :(得分:-3)

如果您想设置本地时间,请在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'

然后重新启动服务器