timezones test serve rails how files active ruby-on-rails ruby activerecord timezone

ruby on rails - test - ¿Cómo cambiar la zona horaria predeterminada para Active Record en Rails?



rails gmt time (9)

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


En los rieles 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í


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!


He decidido compilar 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.


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


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.


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!

agregando siguiente a la application.rb funciona

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


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''