Pregunta Convertir la marca de tiempo UTC a ISO 8601 en 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?


75
2017-10-30 02:39


origen


Respuestas:


Creo que estás tratando de engañarnos.

La fecha de entrada a su pregunta es la 25 de octubre de 2010, mientras que el resultado es el 29th 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.

Sin embargo, un pequeño factoid primero: la salida ISO 8601 en Ruby es similar a la salida "Fecha y hora combinadas" de Página de Wikipedia de ISO 8601.

Tienes un hilo y necesitarás convertirlo en Time objeto que puede hacer con to_time. Entonces solo es cuestión de llamar iso8601 en ese objeto para obtener la versión ISO 8601:

"2010-10-25 23:48:46 UTC".to_time.iso8601

los to_time método es cortesía de Rails, mientras que el iso8601 es cortesía de la biblioteca estándar de Ruby.


162
2017-10-30 03:23



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"

19
2017-08-21 14:36



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" 

2
2017-12-05 02:40