2015-11-12 3 views
1

Je veux analyser cette strftime en une chaîne, puis isoler simplement la variable de jour.Comment convertir Strftime en string en Ruby?

'2015-04-15T11:15:34' 

Je sais en python, vous pourriez faire quelque chose comme:

datetime.strptime(element, "%Y-%m-%dT%H:%M:%S") 

après avoir importé quelque chose comme:

from datetime import datetime 
from datetime import timedelta 

Y at-il un module ou fonction Ruby qui peut le faire efficacement ?

Répondre

3

Oui. Il est également appelé strptime. http://ruby-doc.org/stdlib-2.1.1/libdoc/date/rdoc/DateTime.html#method-c-strptime

Analyse la représentation donnée de la date et de l'heure avec le modèle donné et crée un objet date. strptime ne supporte pas la spécification des drapeaux et de la largeur contrairement à strftime.

DateTime.strptime('2001-02-03T04:05:06+07:00', '%Y-%m-%dT%H:%M:%S%z') #=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>

Après y compris la bibliothèque date nécessaire, vous pouvez alors appeler #day sur l'objet DateTime résultant pour obtenir le jour. par exemple.

irb(main):016:0> require 'date' 
=> true 
irb(main):017:0> date = DateTime.strptime('2015-04-15T11:15:34', "%Y-%m-%dT%H:%M:%S") 
=> #<DateTime: 2015-04-15T11:15:34+00:00 ((2457128j,40534s,0n),+0s,2299161j)> 
irb(main):018:0> date.day 
=> 15 
+0

Est-ce que cela sera capable de gérer tout après la date, comme les heures, les minutes, les secondes, c'est-à-dire ... 'T11: 15: 34'? Cela ne me dérange pas de laisser tomber cette information non plus. C'est actuellement dans un hachage où le temps est la clé. –

+0

@Codestudio oui, si vous utilisez 'DateTime.strptime' au lieu de' Date.strptime'. Réponse mise à jour pour refléter cela. – sevenseacat

2

Vous pouvez utiliser DateTime.iso8601 si vous connaissez le format est ISO8601, sinon vous pouvez utiliser DateTime.parse qui gère également quelques autres conventions.

2.2.1 :001 > require 'date' 
=> true 
2.2.1 :002 > dt = DateTime.parse('2015-04-15T11:15:34') 
=> #<DateTime: 2015-04-15T11:15:34+00:00 ((2457128j,40534s,0n),+0s,2299161j)> 
2.2.1 :003 > dt.year 
=> 2015 
2.2.1 :004 > dt.month 
=> 4 
2.2.1 :005 > dt.day 
=> 15 
2.2.1 :006 > dt.hour 
=> 11 
2.2.1 :007 > dt.zone 
=> "+00:00"