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

前端之家收集整理的这篇文章主要介绍了ruby – 无效日期ArgumentError和有效日期的错误解析?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. 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"]@H_404_3@
  2. 这会抛出一个无效的参数错误

  3. dates.each do |date|
  4.   d = Date.parse(date)
  5.   d.mon
  6. end
  7.  #=> ArgumentError: invalid date@H_404_3@ 
  8.  

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

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

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

解决方法

鉴于您的输入,Date.parse正在解析您的日期,假设它们的格式为YY / MM / DD,因此当它尝试解析11/25/08时,它会失败,因为25不是有效的月份:
  1. d = Date.parse('11/12/08 10:47')
  2. d.year
  3. # => 2011
  4. d.month
  5. # => 12
  6. d.day
  7. # => 8
  8.  
  9. Date.parse('11/25/08 19:21')
  10. # ArgumentError: invalid date@H_404_3@
  11. 鉴于您的日期都采用相同的格式,您应该使用Date.strptime方法

  12. d = Date.strptime('11/12/08 10:47','%m/%d/%y')
  13. d.year    
  14. # => 2008
  15. d.month
  16. # => 11
  17. d.day
  18. # => 12
  19. Date.strptime('11/25/08 19:21','%m/%d/%y')
  20. # => #<Date: 2008-11-25 ((2454796j,2299161j)>@H_404_3@ 
  21.  

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

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

猜你在找的Ruby相关文章