2012-02-09 105 views
1

我想對使用屏幕抓取腳本創建的記錄進行排序。該腳本將日期和時間(時間戳)每個記錄的以下樣式:基於修改後的時間戳對記錄進行排序?

13 Jan 14:49 

腳本運行,每15分鐘,但如果我設置的排序順序爲「時間DESC」它並沒有真正意義因爲它列出了記錄如下:

13 Jan 14:49 
13 Jan 12:32 
13 Jan 09:45 
08 Feb 01:10 
07 Feb 23:31 
07 Feb 06:53 
06 Feb 23:15 

正如你可以看到,它的正確上市,第一個數字(在數字形式的月份的一天),但它的後一月二月投入。爲了增加混亂,它將2月份的最新日期置於2月份的最高點。

有沒有更好的方式來排序這些,使他們在一個更容易理解的順序?

回答

1

如果要將值存儲在數據庫中,則只需在創建字段時使用列類型datetime。數據庫將把該字段視爲時間,並按時間順序對值進行排序。否則,如果要將值存儲在別處,例如在平面文件中,則將格式化的時間轉換爲unix時間。 Unix時間是一個整數,因此你可以更容易地排序。

Time.parse("13 Jan 09:45").to_i 
# => 1326444300 
Time.parse("08 Feb 01:10").to_i 
# => 1328659800 

您始終可以將unix時間轉換爲Time實例。

Time.at(1328659800).to_s 
# => "2012-02-08 01:10:00 +0100" 
+0

因此,如果我創建一個遷移將時間列從字符串轉換爲整數,它應該按預期工作? – dannymcc 2012-02-09 10:18:21

+0

等待,如果您要將字段存儲在數據庫中,只需將其從字符串轉換爲日期時間即可。數據庫將完成剩下的工作。我不明白你在使用數據庫。 – 2012-02-09 10:20:17

+0

@simon ...遷移過程中現有的值是否會被正確解析? – rubyprince 2012-02-09 10:27:43