No meu application.rb
deparei com o seguinte comentário
# 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)'
Como você pode ver acima, cheguei config.time_zone
ao horário EST. No entanto, ainda quando os registros são criados no banco de dados, parece que eles datetime
estão sendo armazenados no formato UTC.
No comentário acima, eles dizem
... e faça a conversão automática do Active Record para esta zona ...
Como posso fazer isso e onde?
Além disso, eu vou implantar isso no heroku também e eu gostaria que a configuração continuasse
ruby-on-rails
ruby
timezone
rails-activerecord
Onipresente
fonte
fonte
Respostas:
Decidi compilar esta resposta porque todas as outras parecem estar incompletas.
Se você deseja alterar o fuso horário do Rails , mas continuar com o Active Record salvo no banco de dados no UTC , use
Se você deseja alterar o fuso horário do Rails E ter os tempos de armazenamento do Active Record nesse fuso horário, use
Aviso : você realmente deve pensar duas vezes, até três vezes, antes de salvar os tempos no banco de dados em um formato não UTC.
Lembre-se de que
config.active_record.default_timezone
pode levar apenas dois valoresconfig.time_zone
)Veja como você pode encontrar todos os fusos horários disponíveis
fonte
datetime
valores em UTC no banco de dados e apenas alterá-los no frontend como commoment.js
ou o que você sugere para mostrar esses dados no fuso horário correto para qualquer usuário?adicionando o seguinte aos
application.rb
trabalhosfonte
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)'
mas defini-lo com o símbolo: local fez o truque.config.active_record.default_timezone
só deve ser definido como:local
ou:utc
. Presumo que qualquer outra coisa teria resultados inesperados.rake time:zones:all
Cheguei à mesma conclusão que Dean Perry depois de muita angústia.
config.time_zone = 'Adelaide'
econfig.active_record.default_timezone = :local
foi a combinação vencedora. Aqui está o que eu encontrei durante o processo.fonte
No meu caso (Rails 5), acabei adicionando essas 2 linhas no meu
app/config/environments/development.rb
É isso aí! E para garantir que Melbourne fosse lida corretamente, executei o comando no meu terminal:
bundle exec rake time:zones:all
e Melbourne estava listando no fuso horário em que estou!
fonte
Se você deseja definir o fuso horário como UTC globalmente, você pode fazer o seguinte no Rails 4:
Certifique-se de reiniciar seu aplicativo ou você não verá as alterações.
fonte
Nos trilhos 4.2.2, vá para
application.rb
e useconfig.time_zone='city'
(por exemplo: 'London' ou 'Bucharest' ou 'Amsterdam' e assim por diante).Deve funcionar muito bem. Funcionou para mim.
fonte
Eu tive que adicionar este bloco ao meu
environment.rb
arquivo e tudo estava bem :)Rails.application.initialize!
fonte
para usuário chinês, basta adicionar duas linhas abaixo para você
config/application.rb
:fonte
No Ruby on Rails 6.0.1, vá para config > locales > application.rb e adicione o seguinte:
Você pode ver que estou configurando o fuso horário com 2 linhas:
Espero que ajude aqueles que estão trabalhando com Ruby on Rails 6.0.1
fonte
Se você deseja definir a hora local, adicione o seguinte texto em
application.rb
Em seguida, reinicie o servidor
fonte