Ruby Time.parse mi dà un errore fuori portata
-
03-07-2019 - |
Domanda
Sto usando Time.parse per creare un oggetto Time da una stringa.
Per qualche motivo
Time.parse("05-14-2009 19:00")
causa un argomento nostro di errore range, mentre
Time.parse("05-07-2009 19:00")
non
Qualche idea?
Soluzione
La mia ipotesi sarebbe che si aspettasse che la seconda parte della stringa (il 14) fosse il mese.
Altri suggerimenti
Se conosci il formato della stringa usa:
Time.strptime(date, format, now=self.now) {|year| ...}
http://www.ruby-doc.org /core-1.9/classes/Time.html#M000266
Risolverà il tuo problema e probabilmente sarà più veloce di Time.parse
.
EDIT:
Sembra che abbiano preso strptime
dalla classe Time, ma ha comunque chiamato Date.strptime
. Se sei su Rails puoi fare:
Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time
se usi il rubino puro allora hai bisogno di:
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])
Vedi anche: Data e ora che formano problemi in Ruby on Rails .
È a causa dell'euristica di Time # parse
.
Ed è dovuto ai formati anglo-americani.
Con trattini '-' si aspetta mm-gg-aaaa, con barre '/' si aspetta gg / mm / aaaa.
Questo comportamento cambia intenzionalmente in 1.9. per raggiungere gli standard di data eur, iso e jp.
Probabilmente non è necessario per risolvere questo problema, ma consiglio comunque di consultare il parser di data / ora in linguaggio naturale Chronic , mi ha risparmiato un sacco di lavoro un paio di volte.
Probabilmente si aspetta il formato Giorno-Mese-Anno, quindi il tuo primo valore sta cercando di specificare il 5 ° giorno del 14 ° mese.