为什么我不能解析保存到Ruby变量中的日期字符串?

时间:2014-04-11 21:11:23

标签: ruby-on-rails ruby activesupport

我需要在我的Rails应用程序中运行以下代码:

ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date).utc.to_date.strftime("%_m/%d")[1..-1]

游戏是@games.each do |game|

但这不起作用,我收到错误TypeError: no implicit conversion of ActiveSupport::TimeWithZone into String

但是,我可以跑:

ActiveSupport::TimeZone["Central Time (US & Canada)"].parse("2014-04-11 12am").utc.to_date.strftime("%_m/%d")[1..-1]

返回" 4/11"

如何将上述代码用于`game.date'而不是硬编码的字符串?

修改

Game对象如下所示(来自db / seeds.rb):

Game.create(id: 9, date: "2014-04-11 12am", time: "705PM", opponent: "Jacksonville", away: false, event: "friday night fireworks")

编辑2

在我做game.date的rails控制台中,它返回:

Fri, 11 Apr 2014 00:00:00 UTC +00:00

所以看起来它不是一个字符串。

3 个答案:

答案 0 :(得分:16)

要制作您尝试做的工作,您需要将日期转换为to_s的字符串:

ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date.to_s).utc.to_date.strftime("%_m/%d")[1..-1]

但是,您应该考虑这是否真的是您想要做的。现在看来,这段代码是一个日期,将其转换为字符串,解析字符串以返回日期,然后再将其转换为字符串。你确定你不能得到这样的东西吗?

game.date.strftime(%_m/%d")[1..-1]

答案 1 :(得分:3)

您可以使用以下字符串:

如文献http://rubyinrails.com/2013/09/strftime-format-time-in-ruby/所述

game.date.strftime("%Y-%m-%d %I:%M%P")
#output=> "2014-04-11 12am"

所以在循环中你可以使用:

ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date.strftime("%Y-%m-%d %I:%M%P")).utc.to_date.strftime("%_m/%d")[1..-1]

答案 2 :(得分:2)

ActiveSupport::TimeZone.parse需要一个字符串,而不是下面的Date对象示例:

 ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(Date.current.to_s).utc.to_date.strftime("%_m/%d")[1..-1]
 #=> "4/11" 

所以改变:

ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date).utc.to_date.strftime("%_m/%d")[1..-1]

为:

ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date.to_s).utc.to_date.strftime("%_m/%d")[1..-1]