ruby-on-rails - data - ruby on rails timezone




Como alterar o fuso horário padrão para o Active Record in Rails? (6)

Cheguei à mesma conclusão que Dean Perry depois de muita angústia. config.time_zone = 'Adelaide' e config.active_record.default_timezone = :local foi a combinação vencedora. Aqui está o que eu encontrei durante o processo.

No meu application.rb me 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ê vê acima, eu fiz config.time_zone para a hora do EST. No entanto, ainda quando os registros são criados no banco de dados, parece que o datetime está sendo armazenado no formato UTC.

No comentário acima, eles dizem

... e faça o Active Record converter automaticamente para esta zona ...

Como posso fazer isso e onde?

Além disso, eu vou estar implantando isso em heroku também e eu gostaria que a configuração para transportar


Eu decidi compilar esta resposta porque todos os outros parecem estar incompletos.

config.active_record.default_timezone determina se é necessário usar Time.local (se definido como: local) ou Time.utc (se configurado como: utc) ao extrair datas e horas do banco de dados. O padrão é: utc. http://guides.rubyonrails.org/configuring.html

Se você quiser alterar o fuso horário do Rails , mas continuar a ter o Active Record salvo no banco de dados no UTC , use

# application.rb
config.time_zone = 'Eastern Time (US & Canada)'

Se você quiser alterar o fuso horário do Rails E tiver tempos de armazenamento do Active Record neste fuso horário, use

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

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.

Nota
Não esqueça de reiniciar seu servidor Rails depois de modificar application.rb .

Lembre-se que config.active_record.default_timezone pode levar apenas dois valores

  • : local (converte para o fuso horário definido em config.time_zone )
  • : utc (converte para UTC)

Veja como você pode encontrar todos os fusos horários disponíveis

rake time:zones:all

No meu caso (Rails 5), acabei adicionando essas 2 linhas no meu app/config/environments/development.rb

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

É isso aí! E para ter certeza de que o Melbourne foi lido corretamente, executei o comando no meu terminal:

bundle exec rake time:zones:all

e Melbourne estava listando no fuso horário em que estou!


Nos trilhos 4.2.2, vá para application.rb e use config.time_zone='city' (por exemplo: 'London' ou 'Bucharest' ou 'Amsterdam' e assim por diante).

Deve funcionar muito bem. Isso funcionou para mim.


Se você quiser que a hora local seja definida, adicione o seguinte texto em 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'

Então reinicie seu servidor


adicionando o seguinte ao application.rb funciona

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




rails-activerecord