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
。示例在
而不是时间
解析。