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?

È stato utile?

Soluzione

La mia ipotesi sarebbe che si aspettasse che la seconda parte della stringa (il 14) fosse il mese.

Questo link può aiutarti ad analizzarlo.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top