2011-06-02 5 views
8

J'ai une chaîne comme "2011-06-02T23: 59: 59 + 05: 30".Ruby - convertir la chaîne à ce jour

Je veux le convertir en format de date et j'ai besoin d'analyser uniquement la date, "2011-06-02".

+1

Cela a été demandé et répondu à plusieurs reprises. Je suggère de fermer en double. http://stackoverflow.com/questions/2720907/ruby-convert-string-to-date –

+0

duplication possible de [Ruby String to Date Conversion] (http://stackoverflow.com/questions/3599239/ruby-string-to -date-conversion) – DGM

Répondre

24

Pour Ruby 1.9.2:

require 'date' # If not already required. If in Rails then you don't need this line). 
puts DateTime.parse("2011-06-02T23:59:59+05:30").to_date.to_s 
2

Simplies chemin est

require 'date' 
date = "2011-06-02T23:59:59+05:30".gsub(/T.*/, '') 
DateTime.parse(date) 
+1

Ou vous pouvez utiliser 'Date' au lieu de' DateTime' et ignorer l'opération gsub;) – Schovi

12
require 'date' 
d = Date.parse("2011-06-02T23:59:59+05:30") 
d.strftime("%F") 
+0

ou simplement 'd.to_s' :) – rubyprince

+2

cela n'analysera pas un horodatage avec l'heure correctement - utilisez' DateTime .parse() 'à moins que vous ne vouliez travailler qu'avec des dates. –

+0

@ AdamMcArthur..Le OP voulait spécifiquement la partie date uniquement. Mais, tu as raison. même pour les dates, si on omet la partie temps et les fuseaux horaires, cela peut être dangereux, car cela peut être un autre jour dans un autre fuseau horaire. Donc, mieux vaut utiliser 'DateTime.parse'. – rubyprince

2

Time.parse() devrait vous permettre d'analyser tout le temps de la date. Ensuite, vous pouvez utiliser time.strftime (string) pour formater cela comme juste une date dans une chaîne.

 
date = Time.parse("2011-06-02T23:59:59+05:30") 
date_string = time.strftime("%y-%m-%d") 
of 
date_string = time.strftime("%F") 

(voir Ruby Doc for Time pour plus de formats de chaîne de sortie) Le devrait fonctionner au-dessus si vous voulez une chaîne; Si vous voulez gérer un objet date, alors la classe ruby ​​Date peut vous aider à le gérer, mais je crois que tout doit encore être fait avec les objets Time; Voir Ruby Doc for Date pour plus de détails sur la classe Date. J'espère que cela aide, faites-moi savoir si je suis parti dans la mauvaise direction avec ma réponse.