基于修改后的时间戳对记录进行排序?

问题描述:

我想对使用屏幕抓取脚本创建的记录进行排序。该脚本将日期和时间(时间戳)每个记录的以下样式:基于修改后的时间戳对记录进行排序?

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月份的最高点。

有没有更好的方式来排序这些,使他们在一个更容易理解的顺序?

如果要将值存储在数据库中,则只需在创建字段时使用列类型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