Se d = DateTime.now
sim, como faço para converter 'd' em UTC (com a data apropriada)?
96
d = DateTime.now.utc
Ops!
Isso parece funcionar no Rails, mas não no Ruby vanilla (e é claro que é isso que a pergunta está perguntando)
d = Time.now.utc
Funciona no entanto.
Existe algum motivo que você precisa usar DateTime
e não Time
? Time
deve incluir tudo que você precisa:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
funcionará em Ruby padrão (ou seja, sem ActiveSupport).
fonte
new_offset
método padrão argumento para0
já. Portanto, tambémDateTime.now.new_offset
pode ser usado.Infelizmente, a classe DateTime não tem os métodos de conveniência disponíveis na classe Time para fazer isso. Você pode converter qualquer objeto DateTime em UTC assim:
Você pode voltar do UTC para o local usando:
onde
d
é um objeto DateTime no horário UTC. Se você quiser esses métodos de conveniência, poderá criá-los assim:Você pode ver isso em ação na seguinte sessão de irb:
Como você pode ver acima, o objeto DateTime inicial tem um deslocamento de -04: 00 (horário do leste). Estou no horário do Pacífico com uma diferença de -07: 00. Chamar
localtime
conforme descrito anteriormente converte corretamente o objeto DateTime na hora local. Chamarutc
o objeto corretamente o converte em um deslocamento UTC.fonte
Experimente isso, funciona em Ruby:
fonte
Você pode definir um ENV se desejar
Time.now
eDateTime.now
responder no horário UTC.fonte
No irb:
irá converter a hora em utc. Mas, conforme postado, se for apenas o tempo que você pode usar:
e receba imediatamente.
fonte
A representação de string de um DateTime pode ser analisada pela classe Time.
fonte