2012-07-23 14 views
21

Ho una stringa 20120119 che rappresenta una data nel formato 'YYYYMMDD'.Parse Data string in Ruby

Voglio analizzare questa stringa in un oggetto Ruby che rappresenta una data in modo che sia possibile eseguire alcuni calcoli di base della data, ad esempio la differenza rispetto alla data odierna.

Sto usando la versione 1.8.6 (requisito).

risposta

56

è possibile utilizzare il metodo Date.strptime fornito nella libreria standard di Ruby:

require 'date' 
string = "20120723" 
date = Date.strptime(string,"%Y%m%d") 

In alternativa, come suggerito nei commenti, è possibile utilizzare Date.parse, perché le euristiche funzionano correttamente in questo caso:

require 'date' 
string = "20120723" 
date = Date.parse(string) 

Entrambi aumenteranno un ArgumentError se la data non è valida:

require 'date' 
Date.strptime('2012-March', '%Y-%m') 
#=> ArgumentError: invalid date 

Date.parse('2012-Foo') # Note that '2012-March' would actually work here 
#=> ArgumentError: invalid date 

Se si desidera rappresentare anche ore, minuti e così via, è necessario guardare DateTime. DateTime fornisce anche un metodo parse che funziona come il metodo di analisi su Date. Lo stesso vale per strptime.

+1

Date.parse funziona anche per YYYYMMDD. Nessuna stringa di formato necessaria. – rrhartjr

+1

E a proposito di parsing exception? – chrisapotek

+0

C'è un modo per rilevare se una stringa genererà l'eccezione di analisi? – theUtherSide