当我尝试通过终端中的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
我已经尝试了几个小时知道并且无法找到问题。想知道有人可以帮忙吗?
答案 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