我需要在我的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
所以看起来它不是一个字符串。
答案 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]