2012-07-23 12 views
21

Tengo una Cadena 20120119 que representa una fecha en el formato 'YYYYMMDD'.Parse Cadena de fecha en Ruby

Quiero analizar esta cadena en un objeto Ruby que representa una Fecha para que pueda hacer un cálculo de fecha básico, como diff en comparación con la fecha de hoy.

Estoy usando la versión 1.8.6 (requisito).

Respuesta

56

se puede utilizar el método de Date.strptime proporcionada en la biblioteca estándar de Ruby:

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

Como alternativa, como se sugiere en los comentarios, se puede usar Date.parse, debido a que las heurísticas funcionan correctamente en este caso:

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

Tanto lanzará una ArgumentError si la fecha no es válida:

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 

Si también desea representar horas, minutos, etc., debe consultar DateTime. DateTime también proporciona un método parse que funciona como el método de análisis en Date. Lo mismo ocurre con strptime.

+1

Date.parse también funciona para YYYYMMDD. No se necesita cadena de formato. – rrhartjr

+1

¿Qué tal una excepción de análisis? – chrisapotek

+0

¿Hay alguna forma de detectar si una cadena lanzará la excepción de análisis? – theUtherSide