Ruby on rails 3 根据修改的时间戳对记录进行排序?

Ruby on rails 3 根据修改的时间戳对记录进行排序?,ruby-on-rails-3,sorting,activerecord,scope,record,Ruby On Rails 3,Sorting,Activerecord,Scope,Record,我试图对使用屏幕抓取脚本创建的记录列表进行排序。脚本将以下样式的日期和时间(时间戳)添加到每个记录中: 13 Jan 14:49 脚本每15分钟运行一次,但如果我将排序顺序设置为“time 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 如您所见,它正确地列出了第一个数字(数字形式中的月日),但它将二月放在一月之

我试图对使用屏幕抓取脚本创建的记录列表进行排序。脚本将以下样式的日期和时间(时间戳)添加到每个记录中:

13 Jan 14:49
脚本每15分钟运行一次,但如果我将排序顺序设置为“time 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月份部分的顶部


是否有更好的方法对这些值进行排序,以便它们以更易于理解的顺序排列?

如果要将值存储在数据库中,只需在创建字段时使用列类型
datetime
。数据库将该字段视为时间,并按时间顺序对值进行排序

否则,如果将值存储在其他位置,例如在平面文件中,请将格式化时间转换为unix时间。Unix时间是一个整数,因此您可以更轻松地对其进行排序

Time.parse("13 Jan 09:45").to_i
# => 1326444300
Time.parse("08 Feb 01:10").to_i
# => 1328659800 
您始终可以将unix时间转换为时间实例

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

如果要将值存储在数据库中,只需在创建字段时使用列类型
datetime
。数据库将该字段视为时间,并按时间顺序对值进行排序

否则,如果将值存储在其他位置,例如在平面文件中,请将格式化时间转换为unix时间。Unix时间是一个整数,因此您可以更轻松地对其进行排序

Time.parse("13 Jan 09:45").to_i
# => 1326444300
Time.parse("08 Feb 01:10").to_i
# => 1328659800 
您始终可以将unix时间转换为时间实例

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

因此,如果我创建一个迁移来将时间列从字符串转换为整数,它应该会按预期工作?等等,如果您要将字段存储在数据库中,只需将它从字符串转换为datetime即可。数据库将完成其余的工作。我不明白您在使用数据库。@simon…迁移过程中是否正确分析现有值?这取决于数据库。但是,您可以通过这种方式防止问题。在迁移过程中,按顺序执行以下操作:1。将
time
字段重命名为
time\u字符串
2。创建字段
time
3。扫描每条记录,解析
time\u字符串
,并在
time
字段3中插入值。删除时间字段。另外,Rails中的时间字段通常使用
\u at
。示例
parsed_at
而不是
time
。因此,如果我创建一个迁移来将时间列从字符串转换为整数,它应该会按预期工作?等等,如果您正在数据库中存储字段,只需将其从字符串转换为datetime即可。数据库将完成其余的工作。我不明白您在使用数据库。@simon…迁移过程中是否正确分析现有值?这取决于数据库。但是,您可以通过这种方式防止问题。在迁移过程中,按顺序执行以下操作:1。将
time
字段重命名为
time\u字符串
2。创建字段
time
3。扫描每条记录,解析
time\u字符串
,并在
time
字段3中插入值。删除时间字段。另外,Rails中的时间字段通常使用
\u at
。示例
而不是
时间
解析。