2014-04-11 50 views
7

我要在我的Rails應用程序運行下面的代碼:爲什麼我不能在Ruby中解析保存到變量的日期字符串?

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」,而不是硬編碼字符串?

編輯

一個遊戲對象如下所示(從DB/seeds.rb):

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

EDIT 2

在當我做遊戲的軌道控制檯.date返回:

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

所以它看起來不是一個字符串。

+0

是'game.date'字符串或另一個日期對象類型? – lurker

+0

你可以發佈樣本遊戲對象還是@遊戲數組? –

+0

我編輯了我的問題。謝謝! – reknirt

回答

13

爲了使你正在試圖做的工作是什麼,您需要將日期轉換爲字符串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

.to_s是非常有幫助的。謝謝。 –

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] 
2

您可以使用下面的字符串:

由於吹罰的文檔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]