Ruby Time.parse me da error fuera de rango
-
03-07-2019 - |
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?
Solución
Mi conjetura sería que se espera que la segunda parte de la cadena (el 14) sea el mes.
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.