2011-03-21 22 views
16

Mi programa de rubí dice que mi fecha no es válida cuando hago eso:¿Qué estoy haciendo mal con DateTime.strptime?

format = "%D/%M/%Y %H:%M:%S:3N" 
date = "21/03/2011 16:39:11.642" 

DateTime.strptime(time, format) 

también he intentado éste:

format = "%D/%M/%Y %H:%M:%S:3" 

Todo lo que consigo es la siguiente:

ArgumentError: invalid date  
     from /usr/local/lib/ruby/1.9.1/date.rb:1688:in `new_by_frags'  
     from /usr/local/lib/ruby/1.9.1/date.rb:1713:in `strptime' 
     from (irb):12 
     from /usr/local/bin/irb:12:in `<main>' 

Respuesta

25

Parece que las directivas de formato de strptime estaban confundidas. Observe cómo %M está en format dos veces, una vez que representa el mes y la próxima vez que representa el minuto?

%D significa la fecha como %m/%d/%y.

%d significa que el día del mes [01,31]

%M significa el minuto [00,59]

%m significa el número del mes [01,12]

Esto debería funcionar :

format = "%d/%m/%Y %H:%M:%S" 
date_time = "21/03/2011 16:39:11.642" 

puts DateTime.strptime(date_time, format) #=> 2011-03-21T16:39:11+00:00 

He aquí una strptime reference

+8

me parece http://strfti.me/ realmente grande para la construcción de estas cadenas de formato. – opsb

+0

¿Los símbolos de cadena de formato para 'strftime' y' strptime' tienen diferentes significados? –

+0

Gracias Michael. Esto realmente me ayudó –

0

intenta utilizar

datetime.to_date.strftime(format)

o

datetime.to_time

Cuestiones relacionadas