1

我经常从网站上抓取一些过时的数据并将其存储到 Rails 应用程序中,但网站上给出的日期采用以下格式:

11/25/2012 01

这是日期和时间。

我需要编写一些代码将其转换为默认的 DateTime 格式:

YYYY-MM-DD HH:MM:SS

但我是 Ruby 的新手。

这是我目前使用 Nokogiri 抓取包含日期的元素并提取文本的代码,也许你可以以此为基础:

datedata = tr.css('td')[0].text

这会刮取日期表行并提取文本。例如,datedata = "11/25/2012 01"

有没有一种方法可以转换datedata为默认的 DateTime 格式以保存到数据库中?仅供参考 - 小时是唯一给出的时间,它们是我的用例的必要数据,没有分钟或秒。

4

3 回答 3

3

您可以使用DateTime'strptime功能

[1] pry(main)> DateTime.strptime("11/25/2012 01", "%m/%d/%Y %H")
=> Sun, 25 Nov 2012 01:00:00 +0000

这应该足以传递给 ActiveRecord,但如果您想将其转换为您在问题中提到的 SQL 日期时间字符串,您可以使用to_formatted_s带有:db选项的 Rails。

[2] pry(main)> DateTime.strptime("11/25/2012 01", "%m/%d/%Y %H").to_formatted_s(:db)
=> "2012-11-25 01:00:00"
于 2013-01-03T05:35:33.987 回答
0

我会使用慢性:

require 'chronic'
datedata = "11/25/2012 01"
Chronic.parse datedata
#=> 2012-11-25 13:00:00 0800

嗯,那个 13:00 好像不对,我们试试:

Chronic.parse "#{datedata}:00"
#=> 2012-11-25 01:00:00 0800

这样更好。

于 2013-01-03T06:17:53.373 回答
-1

一点提示。当你的用户从不同的时区输入日期时,你会随着时间的推移得到一些令人作呕的错误。我使用的通用规则:在您的数据库中以 UTC 存储时间。很简单:时间对象有.utc方法。用户应该有他的时区设置,因此可以很容易地计算用户的本地偏移量。

于 2013-01-03T07:35:47.883 回答