[Ruby-on-rails] How to change default timezone for Active Record in Rails?
I have decided to compile this answer because all others seem to be incomplete.
config.active_record.default_timezone determines whether to use Time.local (if set to :local) or Time.utc (if set to :utc) when pulling dates and times from the database. The default is :utc. http://guides.rubyonrails.org/configuring.html
If you want to change Rails timezone, but continue to have Active Record save in the database in UTC, use
# application.rb config.time_zone = 'Eastern Time (US & Canada)'
If you want to change Rails timezone AND have Active Record store times in this timezone, use
# application.rb config.time_zone = 'Eastern Time (US & Canada)' config.active_record.default_timezone = :local
Warning: you really should think twice, even thrice, before saving times in the database in a non-UTC format.
Do not forget to restart your Rails server after modifying
config.active_record.default_timezone can take only two values
- :local (converts to the timezone defined in
- :utc (converts to UTC)
Here's how you can find all available timezones
application.rb I came across the following comment
# 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)'
As you see from above, I've made
config.time_zone to EST time. However, still when records are created in the DB, it looks like
datetime is being stored in UTC format.
In the above comment, they say
...and make Active Record auto-convert to this zone...
How can I do that, and where?
Also, I'll be deploying this on heroku as well and i'd like the setting to carry over
On rails 4.2.2, go to
application.rb and use
config.time_zone='city' (e.g.:'London' or 'Bucharest' or 'Amsterdam' and so on).
It should work just fine. It worked for me.
for Chinese user, just add two lines below to you
config.active_record.default_timezone = :local config.time_zone = 'Beijing'
In my case (Rails 5), I ended up adding these 2 lines in my
config.time_zone = "Melbourne" config.active_record.default_timezone = :local
That's it! And to make sure that Melbourne was read correctly, I ran the command in my terminal:
bundle exec rake time:zones:all
and Melbourne was listing in the timezone I'm in!