2010-11-11 9 views
7

J'ai un objet DateTime dans Rails qui produit comme celui-ci lorsqu'il est appelé:Comment convertir un objet Rails DateTime en une chaîne XML?

ruby-1.8.7-p302 > Time.now 
=> Wed Nov 10 16:46:51 -0800 2010 

Comment puis-je convertir le DateObject pour retourner une chaîne de type datetime XML comme ceci:

ruby-1.8.7-p302 > Time.now.convert_to_xml 
=> 2010-11-10T16:46:51-08:00 

Répondre

25

Temps au format XML:

Time.now.xmlschema # implemented by Rails, not stock ruby 
Time.now.strftime '%Y-%m-%dT%H:%M:%S%z' 

http://corelib.rubyonrails.org/classes/Time.html#M000281

Pour analyser (Ruby 1.9 et au-delà):

t = Time.now.xmlschema(str) 

http://ruby-doc.org/core-1.9/classes/Time.html#M000329

+0

On dirait que Time.now.xmlschema fonctionne aussi en Ruby 1.8.7. Merci! – Chanpory

+0

@GeekActive, n'oubliez pas de marquer cette réponse comme ** Acceptée **. =) – John

+0

On dirait que 'Time.xmlschema' est implémenté en tant qu'extension de la classe' Time' par Rails. Ce n'est pas du stock Ruby. J'ai mis à jour la réponse. –

0

Utilisez la méthode strftime

Time.now.strftime("your format string") 
+0

to_s ne convertit pas en XML. Je reçois juste la même réponse que 'Time.now' mais entre guillemets' "Wed Nov 10 16:46:51 -0800 2010" ' – Chanpory

+0

Ouais j'ai sauté le pistolet parce que j'ai lu la chaîne. – rwilliams

+0

Mon erreur dans le titre, il vient de l'éditer – Chanpory

5

Essayez Time.now.iso8601

+0

C'est une belle réponse succincte aussi! – Chanpory

+0

"xs: dateTime, qui est intégré à la spécification du schéma XML W3C Data Schema2, et DOIT être exprimé sous forme UTC, sans composant fuseau horaire." – Chloe

1

Voici une manière pure Ruby:

Time.now.strftime("%Y-%m-%dT%H:%M:%S%z") 

Vous pouvez obtenir plus de détails sur les différentes options strftime avec:

ri Time.strftime 
Questions connexes