2013-01-03 58 views
1

我经常刮,并从网站上的一些过时的数据存储到一个Rails应用程序,但在网站上给出的日期是按以下格式:在保存到数据库之前将日期数据转换为正确的日期时间格式?

11/25/2012 01 

哪个日期和时间。

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

YYYY-MM-DD HH:MM:SS 

,但我是新来的红宝石。

下面是代码目前我已经抓取与引入nokogiri含日期元素和提取文本,也许你可以建立过这样:

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

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

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

回答

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日期时间字符串,您可以使用导轨to_formatted_s:db选项。

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

完美地工作。精彩!谢谢Deefour! – ac360

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 

这是更好的。

+0

这是一个很好的建议。感谢您向我介绍Chronic。我用它来完成这项任务,以及其他一些:) – ac360

+0

yw,但如果你使用它,你应该选择它。 – pguardiario

-1

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

+0

感谢提示Alex。幸运的是,我正在组织来自地理位置固定的交易所的价格数据。所以,我只有一个时区来处理。不过,我会为我的下一个项目记住这一点。保重! – ac360

相关问题