ruby on rails - rails - Convertir la marca de tiempo UTC a ISO 8601 en Ruby
time rails format (3)
Creo que estás tratando de engañarnos.
La fecha de entrada a su pregunta es el 25 de octubre de 2010 , mientras que la salida es el 29 de octubre de 2010 . ¡Bien jugado!
Continuando con este hilo de recortes selectivos: sus tiempos también son completamente diferentes y le faltan los segundos del tiempo de salida.
Ahora la verdadera respuesta.
Un poco de facto primero: la salida ISO 8601 en Ruby es similar a la salida "Fecha y hora combinadas" de la página de Wikipedia de ISO 8601 .
Tienes un hilo y tendrás que convertirlo en un objeto Time
que puedes hacer con to_time
. Entonces es simplemente una cuestión de llamar a iso8601
en ese objeto para obtener la versión ISO 8601:
"2010-10-25 23:48:46 UTC".to_time.iso8601
El método to_time
es cortesía de Rails, mientras que el iso8601
es cortesía de la biblioteca estándar de Ruby.
Tengo una marca de tiempo que está en UTC
"2010-10-25 23:48:46 UTC"
Necesito convertirlo a ISO 8601
"2010-10-29 06: 09Z"
La documentación es confusa como el infierno: ¿cuál es la forma más fácil de hacer eso?
Después de mucho experimentar, encuentro que el analizador de la biblioteca Time es mejor que DateTime, aunque las razones se me escapan en este momento. Con esa advertencia, siempre utilizo Time en lugar de DateTime para este tipo de cosas, y la documentación de ruby también es difícil de entender en cuanto a por qué esto es así,
require ''time''
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"
Nota: debe convertir (analizar) una cadena de tiempo en un objeto de tiempo antes de poder aplicar el método to_time.
ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601
NoMethodError: undefined method `to_time'' for "2010-10-25 23:48:46 UTC":String
from (irb):16
Procedimiento correcto:
irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC")
irb> ut.iso8601
=> "2010-10-25T23:48:46+00:00"