Si es así d = DateTime.now, ¿cómo convierto 'd' a UTC (con la fecha apropiada)?
96
d = DateTime.now.utc
¡Ups!
Eso parece funcionar en Rails, pero no vainilla Ruby (y por supuesto eso es lo que hace la pregunta)
d = Time.now.utc
Sin embargo, funciona.
¿Hay alguna razón por la que debas usar DateTimey no Time? Timedebe incluir todo lo que necesita:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
funcionará en Ruby estándar (es decir, sin ActiveSupport).
fuente
new_offsetEl argumento del método0ya es predeterminado . Así que tambiénDateTime.now.new_offsetse puede utilizar.Desafortunadamente, la clase DateTime no tiene los métodos de conveniencia disponibles en la clase Time para hacer esto. Puede convertir cualquier objeto DateTime en UTC como este:
Puede volver de UTC a la hora local usando:
donde
des un objeto DateTime en hora UTC. Si desea que estos sean métodos de conveniencia, puede crearlos así:Puede ver esto en acción en la siguiente sesión de irb:
Como puede ver arriba, el objeto DateTime inicial tiene un desplazamiento de -04: 00 (hora del este). Estoy en la hora del Pacífico con un desplazamiento de -07: 00. Llamar
localtimecomo se describió anteriormente convierte correctamente el objeto DateTime en la hora local. Llamarutcal objeto lo convierte correctamente en un desplazamiento UTC.fuente
Prueba esto, funciona en Ruby:
fuente
Puede configurar un ENV si desea que su
Time.nowyDateTime.nowresponda en hora UTC.fuente
En irb:
convertirá la hora a la utc. Pero como se publicó, si es solo la hora, puede usar:
y consígalo de inmediato.
fuente
La clase Time puede analizar la representación de cadena de un DateTime.
fuente