2012-02-09 14 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 

あなたが見ることができるように、それは(数形式での月の日)が正しく最初の数字をリストアップしていますが、それは1月後に2月を入れています。混乱に加えて、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

+0

データベースにフィールドを格納する場合は、文字列をdatetimeに変換するだけです。データベースは残りの作業を行います。私はあなたがデータベースを使用していたことを理解していませんでした。 –

+0

@simon ...移行中に既存の値が正しく解析されますか? – rubyprince

関連する問題