¿Cómo cambiar la zona horaria predeterminada para Active Record en Rails?

En mi application.rb encontré el siguiente comentario

 # 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 puede ver desde arriba, he config.time_zone para hora EST. Sin embargo, aún cuando se crean registros en la base de datos, parece que la datetime se está almacenando en formato UTC.

En el comentario anterior, dicen

… y hacer que Active Record se convierta automáticamente a esta zona …

¿Cómo puedo hacer eso y dónde?

Además, voy a implementar esto en heroku también y me gustaría que el entorno se transfiera

agregando siguiente a la application.rb funciona

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

He decidido comstackr esta respuesta porque todos los demás parecen estar incompletos.

config.active_record.default_timezone determina si se utilizará Time.local (si se establece en: local) o Time.utc (si se establece en: utc) al extraer fechas y horas de la base de datos. El valor predeterminado es: utc. http://guides.rubyonrails.org/configuring.html


Si desea cambiar la zona horaria de Rails , pero continúa guardando Active Record en la base de datos en UTC , use

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

Si desea cambiar la zona horaria de Rails Y tener tiempos de almacenamiento de Active Record en esta zona horaria, use

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

Advertencia : realmente debería pensar dos veces, incluso tres veces, antes de guardar los tiempos en la base de datos en un formato no UTC.

Nota
No olvide reiniciar su servidor Rails después de modificar application.rb .


Recuerde que config.active_record.default_timezone solo puede tomar dos valores

  • : local (convierte a la zona horaria definida en config.time_zone )
  • : utc (convierte a UTC)

Así es como puedes encontrar todas las zonas horarias disponibles

 rake time:zones:all 

Llegué a la misma conclusión que Dean Perry después de mucha angustia. config.time_zone = 'Adelaide' y config.active_record.default_timezone = :local fue la combinación ganadora. Esto es lo que encontré durante el proceso.

En mi caso (Rails 5), terminé agregando estas 2 líneas en mi app/config/environments/development.rb

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

¡Eso es! Y para asegurarme de que Melbourne se leyó correctamente, ejecuté el comando en mi terminal:

bundle exec rake time:zones:all

¡y Melbourne estaba listando en la zona horaria en la que estoy!

Si desea establecer la zona horaria en UTC globalmente, puede hacer lo siguiente en Rails 4:

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

Asegúrese de reiniciar su aplicación o no verá los cambios.

En los Rails 4.2.2, vaya a application.rb y use config.time_zone='city' (p. Ej .: ‘London’ o ‘Bucharest’ o ‘Amsterdam’, etc.).

debería funcionar bien. Funcionó para mí

Tuve que agregar este bloque a mi archivo environment.rb y todo estaba bien 🙂

 Rails.application.configure do config.time_zone = "Pacific Time (US & Canada)" config.active_record.default_timezone = :local end 
  • Lo agregué antes de la línea Rails.application.initialize!

para el usuario chino, solo agregue dos líneas debajo de su config/application.rb :

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

Si desea establecer la hora local, agregue el siguiente texto en 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' 

Luego reinicia tu servidor