Question

J'utilise Time.parse pour créer un objet Time à partir d'une chaîne.

Pour une raison quelconque

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

provoque un argument notre erreur de plage, alors que

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

ne pas

Des idées?

Était-ce utile?

La solution

J'imagine que son attente dans la deuxième partie de la chaîne (le 14) est le mois.

Ce lien peut vous aider à l'analyser.

Autres conseils

Si vous connaissez le format de la chaîne, utilisez:

Time.strptime(date, format, now=self.now) {|year| ...}   

http://www.ruby-doc.org /core-1.9/classes/Time.html#M000266

Cela résoudra votre problème et sera probablement plus rapide que Time.parse .

EDIT:

On dirait qu'ils ont pris strptime de la classe Time, mais que cela s'appelle quand même Date.strptime . Si vous êtes sur Rails, vous pouvez faire:

Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time

si vous utilisez du rubis pur, il vous faut:

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

Voir aussi: Problèmes de formatage de la date et de l'heure dans Ruby on Rails .

C'est à cause des heuristiques de Time # parse .

Et cela est dû aux formats anglo-américains.

Avec les tirets '-' il attend mm-jj-aaaa, avec les slashes '/' il attend jj / mm / aaaa.

Ce comportement change volontairement en 1.9. respecter les normes de date eur, iso et jp.

Vous n'en avez probablement pas besoin pour résoudre ce problème, mais je vous recommande néanmoins de consulter l'analyseur de date / heure en langage naturel Chronic. , cela m'a évité beaucoup de travail à quelques reprises.

Il attend probablement le format Jour-Mois-Année. Par conséquent, votre première valeur tente de spécifier le 5e jour du 14e mois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top