Pregunta

Estoy usando Time.parse para crear un objeto Time a partir de una cadena.

Por alguna razón

Time.parse("05-14-2009 19:00")

causa un argumento de error de rango, mientras que

Time.parse("05-07-2009 19:00")

no

¿Alguna idea?

¿Fue útil?

Solución

Mi conjetura sería que se espera que la segunda parte de la cadena (el 14) sea el mes.

Este enlace puede ayudarlo a analizarlo.

Otros consejos

Si conoce el formato de la cadena, utilice:

Time.strptime(date, format, now=self.now) {|year| ...}   

http://www.ruby-doc.org /core-1.9/classes/Time.html#M000266

Resolverá su problema y probablemente será más rápido que Time.parse .

EDITAR:

Parece que tomaron strptime de la clase Time, pero de todos modos se llama Date.strptime . Si estás en Rails puedes hacerlo:

Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time

si usas rubí puro entonces necesitas:

require 'date'
d=Date._strptime("05-14-2009 19:00","%m-%d-%Y %H:%M")

Time.utc(d[:year], d[:mon], d[:mday], d[:hour], d[:min], 
         d[:sec], d[:sec_fraction], d[:zone])

Ver también: Problemas de formateo de fecha y hora en Ruby on Rails .

Es debido a las heurísticas de Time # parse .

Y se debe a los formatos angloamericanos.

Con guiones '-' espera mm-dd-aaaa, con barras '/' espera dd / mm / aaaa.

Este comportamiento cambia intencionalmente en 1.9. para cumplir con los estándares de eur, iso y jp date.

Probablemente no lo necesite para resolver este problema, pero todavía recomiendo revisar el analizador de fecha / hora en lenguaje natural crónico , me ha ahorrado mucho trabajo un par de veces.

Es probable que esté esperando el formato Día-Mes-Año, por lo que su primer valor está tratando de especificar el 5 ° día del 14 ° mes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top