gpt4 book ai didi

ruby-on-rails - 使用 strftime 解析日期

转载 作者:数据小太阳 更新时间:2023-10-29 09:03:20 25 4
gpt4 key购买 nike

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

抓取日期时间
@date = h4.at('time[itemprop="startDate"]')[:datetime]

这给我 2015-04-28 19:30:00 UTC,它被插入到我的日期列中,类型为“datetime”。

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

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

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

非常感谢任何帮助。

最佳答案

下面是一些可能有用的代码:

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"

解析为 Date 对象只存储年月日信息。

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"

解析为 DateTime 或 Time 对象会捕获所有信息。

您看到的错误通常是由格式不符合您预期的日期字符串引起的。当您期望一个按“mm/dd/yy”顺序排列的值,但实际上收到一个按“dd/mm/yy”顺序排列的值时,通常会发生这种情况。发生这种情况是因为美国使用“mm/dd/yy”,而世界其他大部分地区使用“dd/mm/yy”:

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)

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

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

关于ruby-on-rails - 使用 strftime 解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com