Mi aplicación Rails 5 está configurada en BRT (zona horaria de Brasil) y mi base de datos de Postgres en UTC. Nunca tuve que preocuparme por eso porque Rails siempre calculaba la hora correcta al leer o escribir en la base de datos. Entonces, por ejemplo, cuando tenía un campo de entrada con time = 15:00 , escribía 18:00 en la base de datos y, al leer de la base de datos, regresaba 15:00 nuevamente. ¡Perfecto!
Pero ahora quiero escribir el comienzo del mes en la base de datos:
Time.now.beginning_of_month que es 2017-04-01 00:00:00
Payment.create( :time => Time.now.beginning_of_month ) Ahora escribe exactamente esto (en BRT) en la base de datos sin convertir a UTC. Cuando leo esto de la base de datos más tarde, lo convierte a BRT 2017-03-31 21:00:00 , lo cual es incorrecto.
Por supuesto, podría convertir la hora a UTC antes de guardarla en la base de datos. Pero me parece extraño que Rails siempre se encargue de convertir y en este caso no lo hace.
Espero que el problema se haya aclarado.
¿Algunas ideas?
Encontré un artículo muy bueno sobre este tema:
https://www.varvet.com/blog/trabajando-con-husos-horarios-en-ruby-on-rails/
Básicamente, lo que tenía que hacer es cambiar Time.now a Time.current ya que Time.now ignora la configuración de la zona horaria.