ruby – 无效日期ArgumentError和有效日期的错误解析?

dates = ["11/12/08 10:47","11/12/08 13:23","11/12/08 13:30","11/25/08 19:21","2/2/09 11:29","11/12/08 15:00"]

这会抛出一个无效的参数错误

dates.each do |date|
  d = Date.parse(date)
  d.mon
end
 #=> ArgumentError: invalid date

但是在日期中取第一个日期,这是输出

d = Date.parse('11/12/08 10:47')
puts d.mon
 #=> #<Date: 2011-12-08 ((2455904j,0s,0n),+0s,2299161j)> 
 #=> 12 but this should be 11

>在第一个例子中为什么我得到一个无效的ArgumentError?
>在示例2中,为什么使用mon和day交换创建Date对象?

解决方法

鉴于您的输入,Date.parse正在解析您的日期,假设它们的格式为YY / MM / DD,因此当它尝试解析11/25/08时,它会失败,因为25不是有效的月份:
d = Date.parse('11/12/08 10:47')
d.year
# => 2011
d.month
# => 12
d.day
# => 8

Date.parse('11/25/08 19:21')
# ArgumentError: invalid date

鉴于您的日期都采用相同的格式,您应该使用Date.strptime方法

d = Date.strptime('11/12/08 10:47','%m/%d/%y')
d.year    
# => 2008
d.month
# => 11
d.day
# => 12

Date.strptime('11/25/08 19:21','%m/%d/%y')
# => #<Date: 2008-11-25 ((2454796j,2299161j)>

编辑而不是格式字符串%m /%d /%y可以使用快捷键%D:

Date.strptime('11/25/08 19:21','%D')
# => #<Date: 2008-11-25 ((2454796j,2299161j)>

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...