为啥我不能解析保存到 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 会随时间保存日期)?

Ruby 中的日期时间解析

为啥我无法解析这种日期格式 yyyy-MM-dd'T'HH:mm:ss.SSSZ?

为啥我不能在 terra::rast 中添加日期作为标题?

为啥我不能从数据库中保存和检索我的向量(二进制)和特殊字符?