rails now ruby-on-rails ruby datetime time

ruby-on-rails - now - time zones rails



Ruby Time.parse me da error fuera de rango (5)

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 nuestro de error de rango, mientras que

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

no

¿Algunas ideas?


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. Cumplir con los estándares de eur, iso y jp.



Probablemente 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.


Probablemente no lo necesite para resolver este problema, pero aún así recomiendo revisar el analizador de fecha / hora del lenguaje natural Chronic , me ha ahorrado mucho trabajo un par de veces.


Si conoces el formato de la cadena utiliza:

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 hacer:

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])

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