Ruby 1.87 vs 1.92 Date.parse

在Ruby 1.87中,我可以这样做:

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

现在在1.9.2我得到:

ArgumentError:无效的date

有任何想法吗?

使用strptime并给出特定的时间格式。

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

请参阅michaelmichael对Ruby版本之间差异原因的回应 。

根据这个bug报告 ,parsingmm/dd/yydate的能力在1.9被有意删除。 Ruby的创造者Yukihiro Matsumoto说:

“dd / dd / dd”格式本身非常具有文化依赖性和含糊性。 在日本(和其他国家)是yy / mm / dd,在美国是mm / dd / yy,在欧洲国家是dd / mm / yy,对不对? 在某些情况下,你可以不小心告诉他们,但是在一般情况下我们不应该依靠运气。 我相信这是parsing这种格式在1.9中被禁用的原因。

正如hansengel所build议的那样,您可以使用Date.strptime来代替。

我一直用Date.parseparsingdate一直很困难。 我的解决scheme是赞美chronicgem 。 我也喜欢在另一个答案中find的strptime函数。

我喜欢american_date gem来完成这个…

  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