日期字符串错误

时间:2013-10-14 15:52:57

标签: ruby string date

当我尝试通过终端中的IRB添加我的日期时:

song.released_on = Date.new(2013,10,10)

它表示存在以下错误TypeError: no implicit conversion of Date into String

在此代码中:

def released_on=date
  super Date.strptime(date, '%m/%d/%Y')
end 

我已经尝试了几个小时知道并且无法找到问题。想知道有人可以帮忙吗?

2 个答案:

答案 0 :(得分:7)

代码:

def released_on=date
  super Date.strptime(date, '%m/%d/%Y')
end

使用Date类的strptime(字符串分析时间)函数。它需要两个字符串,一个代表实际日期,另一个字符串格式化。

为了让工作顺利,您需要做的就是改变:

song.released_on = Date.new(2013,10,10) # Wrong, not a string!
song.released_on = '10/10/2013' # Correct!

您也可以将功能更改为也接受日期:

def released_on=date
  parsed_date = case date
    when String then Date.strptime(date, '%m/%d/%Y')
    when Date then date
    else raise "Unable to parse date, must be Date or String of format '%m/%d/%Y'"
  end
  super parsed_date
end

答案 1 :(得分:2)

您将Date个实例传递给Date::strptime

date = Date.new(2013,10,10)
Date.strptime(date, '%m/%d/%Y')  #=> TypeError: no implicit conversion of Date into String

相反,您必须传递String(使用正确的格式):

date = "10/10/2013"
Date.strptime(date, '%m/%d/%Y')  #=> Thu, 10 Oct 2013