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/yy
date的能力在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.parse
parsingdate一直很困难。 我的解决scheme是赞美chronic
gem 。 我也喜欢在另一个答案中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