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