Как изменить часовой пояс по умолчанию для активной записи в 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 есть время. Однако, все же, когда записи создаются в БД, это выглядит как datetime хранится в формате UTC.

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

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

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

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

9 113

9 ответов:

добавляем следующее application.rb работает

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

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

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


если вы хотите изменить рейлинги часовой пояс, но продолжайте иметь Активная Запись сохранить в базе данных в UTC используйте

# 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.

Примечание
Не забудьте перезагрузить сервер Rails после изменения application.rb.


помните, что config.active_record.default_timezone может принимать только два значения

  • : local (преобразуется в часовой пояс, определенный в config.time_zone)
  • : utc (преобразуется в UTC)

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

rake time:zones:all

config.time_zone = 'Adelaide' и config.active_record.default_timezone = :local была выигрышная комбинация. Вот это что я нашел во время процесса.

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

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

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

bundle exec rake time:zones:all

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

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

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

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

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

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

Я должен был добавить этот блок в мой и все было хорошо :)

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

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

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

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

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