在保存到DB之前将日期数据转换为正确的DateTime格式?

时间:2013-01-03 05:24:55

标签: mysql ruby-on-rails ruby screen-scraping

我经常从网站上抓取并存储一些过时数据到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格式以保存到数据库中?仅供参考 - 小时是唯一给出的时间,它们是我用例的必要数据,没有分钟或秒。

3 个答案:

答案 0 :(得分:3)

您可以使用DateTimestrptime功能

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

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

[2] pry(main)> DateTime.strptime("11/25/2012 01", "%m/%d/%Y %H").to_formatted_s(:db)
=> "2012-11-25 01:00:00"

答案 1 :(得分: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

那更好。

答案 2 :(得分:-1)

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