当我尝试在终端中通过 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
我已经尝试了几个小时知道并找不到问题。想知道有人可以帮忙吗?
编码:
def released_on=date
super Date.strptime(date, '%m/%d/%Y')
end
使用strptime
Date 类的 (string-parse-time) 函数。它需要两个字符串,一个代表实际日期,一个带有字符串格式化程序。
为了使事情正常进行,您需要做的就是改变:
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
您将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