如何更改 Rails 中活动记录的默认时区?

在我的 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 格式存储的。

在上面的评论中,他们说

... 并使活动记录自动转换到这个区域..。

我要怎么做,在哪里?

还有,我也会在 Heroku 上部署这个,我希望设置能够继续

135446 次浏览

application.rb工程增加以下内容

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

我在极度痛苦之后得出了和佩里院长一样的结论。config.time_zone = 'Adelaide'config.active_record.default_timezone = :local是胜利的组合。这是过程中的 我发现了什么

如果希望设置本地时间,请在 application.rb中添加以下文本

config.time_zone = 'Chennai'


# WARNING: This changes the way times are stored in the database (not recommended)
config.active_record.default_timezone = :local

然后重启服务器

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

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

请确保重新启动应用程序,否则您将看不到更改。

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

Active _ record.Default _ timezone 确定从数据库中提取日期和时间时是使用 Time.local (如果设置为: local)还是 Time.utc (如果设置为: utc)。默认值是: utc。 Http://guides.rubyonrails.org/configuring.html


如果希望更改 铁路时区,但继续将 活动记录保存在 协调世界时中的数据库中,请使用

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

如果希望更改 铁路时区 还有在此时区中具有 活动记录存储时间,请使用

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

警告 : 在以非 UTC 格式在数据库中保存时间之前,您确实应该三思而后行。

注意
不要忘记在修改 application.rb之后重新启动您的 Rails 服务器。


请记住,config.active_record.default_timezone只能取两个值

  • : local (转换为 config.time_zone中定义的时区)
  • : UTC (转换为 UTC)

下面介绍如何找到所有可用的时区

rake time:zones:all

在轨道4.2.2上,转到 application.rb并使用 config.time_zone='city'(例如: ‘ London’或‘ Bucharest’或‘ Armstrong’等等)。

应该没问题,对我很有效。

在我的例子中(Rails 5) ,我最终在 app/config/environments/development.rb中添加了这两行代码

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

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

bundle exec rake time:zones:all

墨尔本在我所在的时区排名第一!

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

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

我不得不把这个代码块添加到我的 environment.rb文件中,一切都很好:)

Rails.application.configure do
config.time_zone = "Pacific Time (US & Canada)"
config.active_record.default_timezone = :local
end
  • 我把它添加到 之前线 Rails.application.initialize!

在 RubyonRails 6.0.1中,转到 配置 > 地点 > 应用并添加以下命令:

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

你可以看到我用两行来配置时区:

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

我希望它能帮助那些使用 RubyonRails 6.0.1的人