【问题标题】:Ruby Newbie strftime Time.NowRuby 新手 strftime Time.Now
【发布时间】:2012-11-19 11:17:09
【问题描述】:

我有以下用 ruby​​ 写的

t = Time.now
    t.strftime("%Y-%d-%m")

SCHEDULER.every '1m', :first_in => 0 do |job|
  send_event('gmail_gh', {current: gmail.inbox.count(:after => Date.parse(t)), older: gmail.inbox.count})  

但我得到了这个错误

scheduler caught exception:
can't convert Time into String
/var/dashing/cdmdash/jobs/gmail_gh.rb:21:in `parse'
/var/dashing/cdmdash/jobs/gmail_gh.rb:21:in `block in <top (required)>'
/usr/local/rvm/gems/ruby-1.9.3-p327/gems/rufus-scheduler-2.0.17/lib/rufus/sc/jobs.rb:231:in `call'
/usr/local/rvm/gems/ruby-1.9.3-p327/gems/rufus-scheduler-2.0.17/lib/rufus/sc/jobs.rb:231:in `trigger_block'
/usr/local/rvm/gems/ruby-1.9.3-p327/gems/rufus-scheduler-2.0.17/lib/rufus/sc/jobs.rb:191:in `block in trigger'
/usr/local/rvm/gems/ruby-1.9.3-p327/gems/rufus-scheduler-2.0.17/lib/rufus/sc/scheduler.rb:416:in `call'
/usr/local/rvm/gems/ruby-1.9.3-p327/gems/rufus-scheduler-2.0.17/lib/rufus/sc/scheduler.rb:416:in `block in trigger_job'

我认为它与 t 变量有关,它不是一个 truing,我是 Ruby 新手,所以我有点卡住了

【问题讨论】:

    标签: ruby-on-rails ruby strftime


    【解决方案1】:

    如果您查看 gem 文档,您会看到 :after 和 :before 参数采用 YYYY-MM-DD 格式的日期。

    来自 gem 自述文件:

    gmail.inbox.count(:after => Date.parse("2010-02-20"), :before => Date.parse("2010-03-20"))
    gmail.inbox.count(:on => Date.parse("2010-04-15"))
    

    您的代码在 YYYY-DD-MM 中传递,这可能会导致错误。

    编辑

    当您在 datetime 对象上调用 strftime 时,它​​不会修改该对象 - 只会根据您提供的格式返回字符串表示法。

    因此,Date.parse(t) 仍在获取 Time.now 是一个参数。

    试试这个:

    t = Time.now.strftime("%Y-%m-%d")
    Date.parse(t)
    

    【讨论】:

    • 感谢您,我已将变量编辑为 t.strftime("%Y-%m-%d") 但我仍然收到错误
    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2019-05-23
    • 2011-08-24
    相关资源
    最近更新 更多