Estou tendo problemas para converter um UTC Time
ou TimeWithZone
para a hora local no Rails 3.
Digamos que moment
seja alguma Time
variável em UTC (por exemplo moment = Time.now.utc
). Como faço moment
para converter para meu fuso horário, cuidando do DST (ou seja, usando EST / EDT)?
Mais precisamente, gostaria de imprimir "Segunda-feira, 14 de março, 9h" se a hora corresponder a esta manhã, 9h EDT, e "Segunda-feira, 7 de março, 9h", se a hora for 9h EST na última segunda-feira.
Esperançosamente, há outra maneira?
Edit : Primeiro pensei que "EDT" deveria ser um fuso horário reconhecido, mas "EDT" não é um fuso horário real, mais como o estado de um fuso horário. Por exemplo, não faria sentido pedir Time.utc(2011,1,1).in_time_zone("EDT")
. É um pouco confuso, pois "EST" é um fuso horário real, usado em alguns lugares que não usam o horário de verão e duram (UTC-5) um ano.
fonte
(new Date()).getTimeZoneOffset()
. Mas é bastante inconsistente, então esse cara parece ter escrito o seu próprio: onlineaspect.com/2007/06/08/…config.time_zone = 'Wellington'
e, em seguida, usar Time.current (que é equivalente a time.now, mas usou o fuso horário que você definiu)Time#localtime
fornecerá a hora no fuso horário atual da máquina que está executando o código:Atualização: Se você deseja converter para fusos horários específicos, em vez de seu próprio fuso horário, você está no caminho certo. No entanto, em vez de se preocupar com EST vs EDT, passe apenas pelo fuso horário do Leste - ele saberá com base no dia se é EDT ou EST:
fonte
in_time_zone
método com seus fusos horários.Time.now.localtime
funciona em uma sessão normal de irb, mas quando tento executá-lo em uma máquina que está no fuso horário UTC, ele não funciona.É fácil configurá-lo usando a zona local do sistema, apenas em seu application.rb adicione isso
Então, o rails deve mostrar carimbos de data / hora em seu horário local ou você pode usar algo como esta instrução para obter o horário local
fonte
Na verdade, existe um bom Gem chamado
local_time
pelo basecamp para fazer tudo isso apenas no lado do cliente, eu acredito:https://github.com/basecamp/local_time
fonte
Não sei por que, mas no meu caso não funciona da maneira sugerida anteriormente. Mas funciona assim:
Claro que você precisa mudar o
offset
valor para o seu.fonte
Se você está realmente fazendo isso só porque deseja obter o fuso horário do usuário, tudo o que você precisa fazer é alterá-lo
config/applications.rb
.Como isso:
Rails, por padrão, salvará seu registro de tempo em UTC mesmo se você especificar o fuso horário atual.
Portanto, isso é tudo que você precisa fazer e está pronto para continuar.
fonte