为啥我不能解析保存到 Ruby 中变量的日期字符串?
Posted
技术标签:
【中文标题】为啥我不能解析保存到 Ruby 中变量的日期字符串?【英文标题】:Why can't I parse a date string saved to a variable in Ruby?为什么我不能解析保存到 Ruby 中变量的日期字符串? 【发布时间】:2014-05-26 04:52:33 【问题描述】:我需要在我的 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
所以它似乎不是一个字符串。
【问题讨论】:
game.date
是字符串还是其他日期对象类型?
您能发布示例游戏对象或@game 数组吗?
我编辑了我的问题。谢谢!
因为在控制台中#to_s
被控制台中的Date
对象调用。
有什么方法可以解析 Date 对象?
【参考方案1】:
要使您尝试做的工作,您需要使用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]
【讨论】:
【参考方案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]
【讨论】:
【参考方案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]
【讨论】:
以上是关于为啥我不能解析保存到 Ruby 中变量的日期字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有时间的情况下将 LocalDate 保存到 MongoDB(即使我只保存日期,为啥 mongo 会随时间保存日期)?