Как изменить часовой пояс по умолчанию для активной записи в 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.

В приведенном выше комментарии они говорят

... и сделать автоматическую конвертацию активной записи в эту зону...

Как я могу это сделать и где?

Кроме того, я буду развертывать это и на герою, и я бы хотел, чтобы настройка переносилась

Ответ 1

добавление следующего в application.rb works

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

Ответ 2

Я решил скомпилировать этот ответ, потому что все остальные, похоже, неполны.

config.active_record.default_timezone определяет, следует ли использовать Time.local(если установлено значение: local) или Time.utc(если установлено: utc) при выводе дат и времени из базы данных. По умолчанию: utc. http://guides.rubyonrails.org/configuring.html


Если вы хотите изменить часовой пояс Rails, но сохраните Активную запись в базе данных в 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)
  • : utc (конвертирует в UTC)

Здесь вы можете найти все доступные часовые пояса

rake time:zones:all

Ответ 3

Я пришел к тому же выводу, что и Дин Перри, после многого мучения. config.time_zone = 'Adelaide' и config.active_record.default_timezone = :local были выигрышной комбинацией. Здесь что я нашел в процессе.

Ответ 4

В моем случае (Rails 5) я закончил тем, что добавил эти 2 строки в мой app/config/environments/development.rb

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

Что это! И чтобы убедиться, что Мельбурн читается правильно, я выполнил команду в моем терминале:

bundle exec rake time:zones:all

и Мельбурн был листинг в часовом поясе, в котором я оказался!

Ответ 5

Если вы хотите установить часовой пояс для UTC по всему миру, вы можете сделать следующее в Rails 4:

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

Обязательно перезапустите приложение или вы не увидите изменений.

Ответ 6

На рельсах 4.2.2 перейдите к application.rb и используйте config.time_zone='city' (например: "Лондон" или "Бухарест" или "Амстердам" и т.д.).

Он должен работать нормально. Это сработало для меня.

Ответ 7

Мне пришлось добавить этот блок в мой файл environment.rb и все было хорошо :)

Rails.application.configure do
    config.time_zone = "Pacific Time (US & Canada)"
    config.active_record.default_timezone = :local
end
  • Я добавил его перед строкой Rails.application.initialize!

Ответ 8

для китайского пользователя, просто добавьте две строки ниже config/application.rb:

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

Ответ 9

Если вы хотите установить местное время, добавьте следующий текст в 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

Затем перезагрузите сервер