【问题标题】:Date string error [closed]日期字符串错误[关闭]
【发布时间】:2013-10-14 15:52:57
【问题描述】:

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

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

【问题讨论】:

  • 你有什么问题?

标签: ruby string date


【解决方案1】:

代码:

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

【讨论】:

    【解决方案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
    

    【讨论】:

    • 或者让released_on= 足够聪明地通过原样传递Date
    猜你喜欢
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多