47 votes

Ruby 1.87 vs 1.92 Date.parse

En Ruby 1.87, je pouvais le faire :

Date.parse ("3/21/2011")

Maintenant dans la 1.9.2 j'obtiens :

ArgumentError : date non valide

Des idées ?

60voto

Jon Gauthier Points 10173

Utilisez strptime et donner un format de temps spécifique.

ruby-1.9.2-p136 :022 > Date.strptime '03/21/2011', '%m/%d/%Y'
 => #<Date: 2011-03-21 (4911283/2,0,2299161)>

Voir michaelmichael Réponse de la Commission pour la raison de cette différence entre les versions de Ruby.

26voto

michaelmichael Points 6099

Par ce rapport de bogue la capacité d'analyser mm/dd/yy Les dates ont été intentionnellement supprimées dans la version 1.9. Le créateur de Ruby, Yukihiro Matsumoto dit :

Le format "dd/dd/dd" lui-même est très dépend de la culture et est très ambigu. Il est aa/mm/jj au Japon (et dans d'autres pays) pays), mm/jj/aa aux États-Unis, jj/mm/aa. dans les pays européens, non ? Dans certains cas Dans certains cas, vous pouvez les reconnaître par accident, mais nous ne devrions pas compter sur la chance dans dans les cas généraux. Je crois que c'est la raison pour laquelle l'analyse de ce format est désactivée dans la version 1.9.

Comme le suggère hansengel, vous pouvez utiliser Date.strptime à la place.

2voto

John F. Miller Points 8033

J'ai toujours eu des difficultés à analyser les dates avec Date.parse . Ma solution est la gratuité de la chronic pierre précieuse . J'aime aussi le strptime fonction trouvée dans une autre réponse.

2voto

Tom Rossi Points 1525

J'aime le date américaine bijou pour avoir accompli cela...

1voto

grosser Points 4300
  class << self
    def parse_with_us_format(date, *args)
      if date =~ %r{^\d+/\d+/(\d+)$}
        Date.strptime date, "%m/%d/#{$1.length == 4 || args.first == false ? '%Y' : '%y'}"
      else
        parse_without_us_format(date, *args)
      end
    end
    alias_method_chain :parse, :us_format
  end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X