在Ruby 1.87中,我可以做到:
Date.parse ("3/21/2011")
现在在1.9.2我得到:
ArgumentError:无效日期
有什么想法吗?
答案 0 :(得分:60)
使用strptime
并提供特定的时间格式。
ruby-1.9.2-p136 :022 > Date.strptime '03/21/2011', '%m/%d/%Y'
=> #<Date: 2011-03-21 (4911283/2,0,2299161)>
请参阅michaelmichael's response了解Ruby版本之间差异的原因。
答案 1 :(得分:26)
根据this bug report,有意删除了解析mm/dd/yy
日期的能力。 Ruby的创始人Yukihiro Matsumoto说:
“dd / dd / dd”格式本身非常 文化依赖和模棱两可。它 在日本是yy / mm / dd(和其他 国家),美国的mm / dd / yy,dd / mm / yy 在欧洲国家,对吧?在一些 你可以偶然告诉他们, 但我们不应该依靠运气 一般情况。我相信那就是 解析此格式的原因已禁用 在1.9。
正如hansengel建议的那样,您可以使用Date.strptime
代替。
答案 2 :(得分:2)
我一直难以使用Date.parse
解析日期。我的解决方案是chronic
gem的慷慨解囊。我也喜欢在另一个答案中找到的strptime
函数。
答案 3 :(得分:2)
我喜欢american_date宝石来完成这个......
答案 4 :(得分:1)
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