J'ai un horodatage en UTC
"2010-10-25 23:48:46 UTC"
J'ai besoin de le convertir en ISO 8601
"2010-10-29 06: 09Z"
La documentation est déroutante - quel est le moyen le plus simple de le faire?
J'ai un horodatage en UTC
"2010-10-25 23:48:46 UTC"
J'ai besoin de le convertir en ISO 8601
"2010-10-29 06: 09Z"
La documentation est déroutante - quel est le moyen le plus simple de le faire?
Je pense que vous essayez de nous tromper.
La date d'entrée à votre question est que le 25 octobre 2010, tandis que la sortie est le 29 octobre 2010. Bien joué!
Continuer sur cette nit-picking fil de discussion: vos temps sont également totalement différentes et il vous manque les secondes à partir du moment de la sortie.
Maintenant, pour la vraie réponse.
Un petit factoid mais d'abord: la norme ISO 8601 sortie en Ruby, c'est similaire à la "combinaison de la date et de l'heure de sortie" de la norme ISO 8601 la page de Wikipedia.
Vous avez une chaîne de caractères et donc vous aurez besoin pour le convertir en Time
objet que vous pouvez faire avec to_time
. Ensuite, c'est simplement une question de faire appel iso8601
sur l'objet pour obtenir la norme ISO 8601 version:
"2010-10-25 23:48:46 UTC".to_time.iso8601
L' to_time
méthode avec l'aimable autorisation de Rails, tandis que l' iso8601
est courtest de Ruby dans la bibliothèque standard.
Après de nombreuses expériences, je trouve que l'analyseur syntaxique de la bibliothèque Time est meilleur que DateTime, bien que les raisons m'échappent pour le moment. Avec cette mise en garde, j'utilise toujours Time plutôt que DateTime pour ce genre de choses, et la documentation Ruby est également difficile à comprendre pour expliquer pourquoi.
require 'time'
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"
Remarque: vous devez convertir (analyser) une chaîne temporelle en un objet temporel avant de pouvoir appliquer la méthode 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
Procédure correcte:
irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC")
irb> ut.iso8601
=> "2010-10-25T23:48:46+00:00"
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.