web-dev-qa-db-fra.com

ruby DateTime analysant à partir du format 'mm / jj / aaaa'

J'utilise Ruby 1.9.3 et veulent obtenir Date or Time objet de 'mm/dd/yyyy _ date format chaîne

Time.zone.parse("12/22/2011")

cela me donne *** ArgumentError Exception: argument out of range

64
TKumar Stpl
require 'Date'
my_date = Date.strptime("12/22/2011", "%m/%d/%Y")
121
hirolau

Comme ci-dessus, utilisez la méthode strptime, mais notez les différences ci-dessous.

Date.strptime("12/22/2011", "%m/%d/%Y") => Thu, 22 Dec 2011
DateTime.strptime("12/22/2011", "%m/%d/%Y") => Thu, 22 Dec 2011 00:00:00 +0000
Time.strptime("12/22/2011", "%m/%d/%Y") => 2011-12-22 00:00:00 +0000 

(+0000 correspond aux informations du fuseau horaire, et je suis maintenant à l'heure GMT - d'où +0000. La semaine dernière, avant le retour des horloges, j'étais dans BST +0100. Mon application.rb contient la ligne config.time_zone = 'London ')

14
Mitch

Essayez Time.strptime("12/22/2011", "%m/%d/%Y")

7
Lachezar

Serait-ce une option pour vous d'utiliser Time.strptime("01/28/2012", "%m/%d/%Y") à la place de Time.parse? De cette façon, vous aurez un meilleur contrôle sur la manière dont Ruby va analyser la date.

Sinon, il existe des gemmes: (par exemple, Ruby-american_date) pour que le Ruby 1.9 Time.parse se comporte comme Ruby 1.8.7, mais ne l'utilisez que si c'est absolument nécessaire.

1.9.3-p0 :002 > Time.parse '01/28/2012'
ArgumentError: argument out of range

1.9.3-p0 :003 > require 'american_date'
1.9.3-p0 :004 > Time.parse '01/28/2012'
 => 2012-01-28 00:00:00 +0000 
5
LHH