Meus created_at
carimbos de data / hora são armazenados em UTC:
>> Annotation.last.created_at
=> Sat, 29 Aug 2009 23:30:09 UTC +00:00
Como faço para converter um deles para 'Hora do Leste (EUA e Canadá)' (levando em consideração o horário de verão)? Algo como:
Annotation.last.created_at.in_eastern_time
ruby-on-rails
ruby
datetime
Tom Lehman
fonte
fonte
now.in_time_zone(3)
created_at.in_time_zone("EST")
é mais curtoEmbora esta seja uma pergunta antiga, vale a pena mencionar algo. Em uma resposta anterior , é sugerido usar um before_filter para definir o fuso horário temporariamente.
Você nunca deve fazer isso porque o Time.zone armazena as informações no encadeamento e provavelmente vazará para a próxima solicitação tratada por esse encadeamento.
Em vez disso, você deve usar um around_filter para garantir que Time.zone seja redefinido após a conclusão da solicitação. Algo como:
Leia mais sobre isso aqui
fonte
Se você adicionar isso ao seu
/config/application.rb
Então você pode usar o celular
para obter a hora no fuso horário especificado.
fonte
Se você configurar seu
/config/application.rb
fonte
Defina seu fuso horário para o horário do leste.
Você pode definir o fuso horário padrão em config / environment.rb
Agora, todos os registros que você puxar estarão nesse fuso horário. Se você precisa de fusos horários diferentes, digamos com base em um fuso horário do usuário, você pode alterá-lo com um before_filter em seu controlador.
Apenas certifique-se de armazenar todos os seus tempos no banco de dados como UTC e tudo ficará bem.
fonte
Time.zone=
é thread-safe github.com/rails/rails/blob/master/activesupport/lib/… .