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 DateTime
y no Time
? Time
debe 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_offset
El argumento del método0
ya es predeterminado . Así que tambiénDateTime.now.new_offset
se 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
d
es 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
localtime
como se describió anteriormente convierte correctamente el objeto DateTime en la hora local. Llamarutc
al objeto lo convierte correctamente en un desplazamiento UTC.fuente
Prueba esto, funciona en Ruby:
fuente
Puede configurar un ENV si desea que su
Time.now
yDateTime.now
responda 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