2

当我尝试在终端中通过 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 

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

4

2 回答 2

8

编码:

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

使用strptimeDate 类的 (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
于 2013-10-14T17:29:23.147 回答
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
于 2013-10-14T16:16:31.400 回答