2010-10-30 34 views

Respuesta

153

Creo que intentas engañarnos.

La fecha de entrada a su pregunta es la 25ta de octubre de 2010, mientras que la salida es la 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 respuesta verdadera.

Un poco factoid primero: la salida ISO 8601 en Ruby es similar a la salida "Fecha y hora combinadas" de ISO 8601's Wikipedia page.

Tienes un hilo y necesitarás convertirlo en un objeto Time que puedes hacer con to_time. Entonces es simplemente una cuestión de llamar iso8601 en ese objeto de 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 los carriles, mientras que el iso8601 se courtest de la biblioteca estándar de Ruby.

+5

Buena respuesta, pero no he tenido la primera parte (¿se suponía que era humor?) –

+3

¡Maldición! viste mi trama para engañarte gente. = P Gracias por la excelente respuesta, me pregunto por qué no solo escriben eso en la documentación. –

+7

@ Mark Thomas: sí se suponía que era humor. Dio una entrada y un tiempo de salida que no coincidiría nunca. Tricksie pequeño hobbit! –

2

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" 
17

Después de mucha experimentación, encuentro analizador de la biblioteca de tiempo para ser mejor que DateTime, aunque las razones se me escapan en este momento. Con esta advertencia, yo siempre uso del tiempo en lugar de DateTime para este tipo de cosas, y la documentación de rubí es también difícil de asimilar por qué esto es así,

require 'time' 
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601 
"2010-10-25T23:48:46Z" 
+2

buena solución de rubí puro. Solo quiero agregar, si la hora original no es UTC, puede querer esto: 'Time.parse (" ... "). Utc.iso8601', de otra manera obtendrás el tiempo con el sufijo '+03: 00' o algún otro valor dependiendo de la zona horaria con la que se da la cadena de tiempo original. Quiero decir en lugar de 'Z'. – akostadinov

Cuestiones relacionadas