Ruby on rails 使用strftime解析日期

Ruby on rails 使用strftime解析日期,ruby-on-rails,ruby,strptime,Ruby On Rails,Ruby,Strptime,我在解析使用Nokogiri抓取网站的日期时遇到问题。我用计算机来计算日期时间 @date = h4.at('time[itemprop="startDate"]')[:datetime] 这给了我2015-04-28 19:30:00 UTC,它被插入到我的日期列中,类型为“datetime” 使用strtime我试图将日期解析为“dd/mm”格式,并将其输入我的Rails表: Date.strptime(@date, "%Y-%m-%d %H:%M:%S %Z").strftime("%m

我在解析使用Nokogiri抓取网站的日期时遇到问题。我用计算机来计算日期时间

@date = h4.at('time[itemprop="startDate"]')[:datetime]
这给了我
2015-04-28 19:30:00 UTC
,它被插入到我的日期列中,类型为“datetime”

使用
strtime
我试图将日期解析为“dd/mm”格式,并将其输入我的Rails表:

Date.strptime(@date, "%Y-%m-%d %H:%M:%S %Z").strftime("%m/%d/%Y")

@event=Event.new
@event.date= @date

非常感谢您的帮助。

您不需要
strftime
,您可以使用
parse
解析日期。只需将字符串转换为日期对象并将其指定给ActiveRecord属性:

@event = Event.new
@event.date = Date.parse('2015-04-28 19:30:00 UTC')

以下是一些可能有帮助的代码:

require 'date'
require 'time'

date = Date.strptime('2015-04-28 19:30:00 UTC', "%Y-%m-%d %H:%M:%S %Z")
# => #<Date: 2015-04-28 ((2457141j,0s,0n),+0s,2299161j)>
date.strftime('%m/%d/%y')
# => "04/28/15"

您可以通过使用一些
rescue
语句来尝试几种不同的格式来解决这个问题


您不想使用
parse
,因为它将假定为'dd/mm/yyyy',并会随着美国日期而爆炸,而且速度较慢,因为它在放弃之前尝试了多种格式。因此,使用您期望的固定格式是一个不错的选择,但您需要搜索各种格式的日期/日期时间字符串,并编写与之匹配的格式字符串。而且,由于您正在抓取页面,因此可能会发现许多错误/格式错误的值,以便进行防御性编程。

您有什么问题?我已经处理了一段时间了,我要么得到“无效日期”,要么在索引中未格式化的日期显示为“2015-04-28 19:30:00 UTC”是事件。在您的模型中,日期是一个
datetime
字段?如果是这样,您就不能使用
DateTime.parse
?这是为了将日期和时间的ASCII表示转换为
datetime
。引用是。您不“将日期解析为”dd/mm“格式,而是将字符串解析为日期对象。一旦它是日期对象,您就可以使用“dd/mm”格式表示它。请记住,日期对象是信息/数据,“格式”只是该值的表示形式。欢迎使用堆栈溢出。把你遇到的问题放到你的问题中去。不要把它留在评论中,强迫潜在的回答者阅读每一条评论只是为了理解问题。帮助我们,帮助你。而且,我不能重复这个问题。也许您需要额外的输入日期示例来演示您看到的内容?“您不需要strftime,您可以使用parse解析日期。”是的,如果速度不是问题的话。谢谢tin man,对于我缺乏堆栈溢出礼仪表示歉意。非常感谢你的帮助。但我的问题是,我有一个循环,它查看事件列表,输入它们的日期,然后输入到我的事件表中,我如何解析这个日期列表,而不是只解析一个日期?例如,我正在参加日期为2015-04-28 19:30:00 UTC、2015-04-29 19:30:00 UTC、2015-04-30 19:30:00 UTC等的活动。您需要将此类信息纳入您的问题中。问题越完整,回答得越快越好。不过,要回答这个问题,您可以循环进行。
datetime = DateTime.strptime('2015-04-28 19:30:00 UTC', "%Y-%m-%d %H:%M:%S %Z")
# => #<DateTime: 2015-04-28T19:30:00+00:00 ((2457141j,70200s,0n),+0s,2299161j)>
datetime.strftime('%m/%d/%y')
# => "04/28/15"

time = Time.strptime('2015-04-28 19:30:00 UTC', "%Y-%m-%d %H:%M:%S %Z")
# => 2015-04-28 19:30:00 UTC
time.strftime('%m/%d/%y')
# => "04/28/15"
date = Date.strptime('2015-28-04', '%Y-%m-%d')
# ~> -:7:in `strptime': invalid date (ArgumentError)
date = Date.strptime('28-04-2015', '%m-%d-%Y')
# ~> -:7:in `strptime': invalid date (ArgumentError)