В своем 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.
В приведенном выше комментарии они говорят
... и сделаем автоматическое преобразование Active Record в эту зону ...
Как я могу это сделать и где?
Кроме того, я разверну это и на heroku, и я бы хотел, чтобы настройки были перенесены
ruby-on-rails
ruby
timezone
rails-activerecord
Вездесущий
источник
источник
Ответы:
Я решил скомпилировать этот ответ, потому что все остальные кажутся неполными.
Если вы хотите изменить часовой пояс 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.
Помните, что
config.active_record.default_timezone
может принимать только два значенияconfig.time_zone
)Вот как вы можете найти все доступные часовые пояса
rake time:zones:all
источник
datetime
значения в формате UTC в базе данных, а затем просто изменить их во внешнем интерфейсе, например, с помощьюmoment.js
или что вы предлагаете, чтобы отображать эти данные в правильном часовом поясе для любого пользователя?добавление следующих к
application.rb
работамconfig.time_zone = 'Eastern Time (US & Canada)' config.active_record.default_timezone = :local # Or :utc
источник
config.time_zone = 'London'
config.active_record.default_timezone = :local
rails c
-ActiveSupport::TimeZone.all.map(&:name)
config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = 'Central Time (US & Canada)'
но установка символа: local сделала свое дело.config.active_record.default_timezone
следует устанавливать только:local
или:utc
. Я предполагаю, что все остальное приведет к неожиданным результатам.rake time:zones:all
Я пришел к тому же выводу, что и Дин Перри после долгих мучений.
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
Это оно! И чтобы убедиться, что Мельбурн прочитан правильно, я выполнил команду в своем терминале:
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'
(например: «Лондон», «Бухарест», «Амстердам» и т. Д.).Он должен работать нормально. У меня это сработало.
источник
Пришлось добавить этот блок в свой
environment.rb
файл и все было хорошо :)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'
источник
В Ruby on Rails 6.0.1 перейдите в config > locales > application.rb и согласитесь на siguiente:
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.
источник
Если вы хотите установить местное время, добавьте следующий текст в
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
Затем перезапустите свой сервер
источник