Evitando problemas com datas e time zones no Rails
Hoje infelizmente já faz um tempo que não trabalho mais com Rails, mas até hoje eu lembro o quanto nossa equipe tinha dores de cabeça com timezones.
Buscando evitá-las corremos atrás de como corrigir, onde encontramos um post muito objetivo que trazia tudo que a gente precisava. Um simples “pode” e “não pode”, e isso salvou nossa vida.
Por isso mantive o link desse post até hoje salvo no meus favoritos, e hoje resolvi postar essas dicas e a lista aqui.
A primeira coisa a ser feita para evitar problemas é setar a time zone do projeto no config/application.rb
para Brasília (se o site for basileiro): config.time_zone = ‘Brasilia’ e não para “UTC -3” ou algo do gênero; de forma a evitar problemas com horário de verão também.
Dessa forma, o Rails permanecerá a hora certa para que seja salva no banco de dados corretamente em UTC 0, como mandam as regras. Da mesma forma, quando você puxar algo salvo no banco em UTC 0, ele já mostrará na tela a time zone do projeto utilizada corretamente.
Porém, o problema é que o Rails tem métodos que retornam a data em UTC 0 e outros, de acordo com a time zone do projeto.
A boa notícia é que você pode seguir essa cheat sheet sempre que for trabalhar com time zones para não ter problemas e rapidamente irá decorar quais métodos devem ou não ser usados.