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.
Mi conjetura sería que se espera que la segunda parte de la cadena (el 14) sea el mes.
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 .