2013-01-03 93 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

相關問題