在我的
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
到达美国东部时间。 但是,当在数据库中创建记录时,看起来 datetime
仍以 UTC 格式存储。
在上面的评论中,他们说
...并使 Active Record 自动转换到此区域...
我该如何做,在哪里做?
另外,我也会将其部署在 Heroku 上,并且我希望保留该设置
我决定编译这个答案,因为所有其他答案似乎都不完整。
config.active_record.default_timezone 确定从数据库提取日期和时间时是使用 Time.local (如果设置为 :local)还是 Time.utc (如果设置为 :utc)。默认值为:utc。 http://guides.rubyonrails.org/configuring.html
如果您想更改 Rails 时区,但继续将 Active Record 以 UTC 保存在数据库中,请使用
# 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 格式将时间保存到数据库之前,您确实应该三思而后行。
注意
修改后不要忘记重新启动Rails服务器。application.rb
请记住,
config.active_record.default_timezone
只能采用两个值
config.time_zone
中定义的时区)以下是查找所有可用时区的方法
rake time:zones:all
将以下内容添加到
application.rb
有效
config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local # Or :utc
经过一番痛苦之后,我得出了与迪恩·佩里(Dean Perry)相同的结论。
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
就是这样!为了确保正确读取 Melbourne,我在终端中运行了命令:
bundle exec rake time:zones:all
墨尔本在我所在的时区中!
如果要将全局时区设置为 UTC,可以在 Rails 4 中执行以下操作:
# Inside config/application.rb
config.time_zone = "UTC"
config.active_record.default_timezone = :utc
请务必重新启动您的应用程序,否则您将看不到更改。
在 Ruby on Rails 6.0.1 中,转到 config > locales > application.rb 并添加以下内容:
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'
我希望它对那些正在使用 Ruby on Rails 6.0.1 的人有所帮助
我必须将此块添加到我的
environment.rb
文件中,一切都很好:)
Rails.application.configure do
config.time_zone = "Pacific Time (US & Canada)"
config.active_record.default_timezone = :local
end
Rails.application.initialize!
在轨道 4.2.2 上,转到
application.rb
并使用 config.time_zone='city'
(例如:“伦敦”或“布加勒斯特”或“阿姆斯特丹”等)。
它应该工作得很好。这对我有用。
对于中国用户,只需添加下面两行即可
config/application.rb
:
config.active_record.default_timezone = :local
config.time_zone = 'Beijing'
特别将其添加到您的环境文件中,例如:
Production.rb
:
config.time_zone = 'Asia/Dubai'
如果要设置当地时间,请在
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
然后重新启动服务器