【问题标题】:Sorting records based on modified timestamp?根据修改后的时间戳对记录进行排序?
【发布时间】:2012-02-09 10:09:53
【问题描述】:

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

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

如您所见,它正确地列出了第一个数字(数字形式的月份中的某天),但它将二月放在一月之后。更令人困惑的是,它将二月的最新日期放在二月部分的顶部。

有没有更好的排序方式,让它们的顺序更容易理解?

【问题讨论】:

    标签: ruby-on-rails-3 sorting activerecord scope record


    【解决方案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" 
    

    【讨论】:

    • 所以如果我创建一个迁移来将时间列从字符串转换为整数,它应该可以按预期工作吗?
    • 等等,如果您将字段存储在数据库中,只需将其从字符串转换为日期时间。数据库将完成其余的工作。我不明白你在使用数据库。
    • @simon...迁移过程中是否会正确解析现有值?
    • 这取决于数据库。但是,您可以通过这种方式防止出现问题。在迁移中按顺序执行以下操作: 1. 将time 字段重命名为time_string 2. 创建字段time 3. 扫描每条记录,解析time_string 并将值插入time 字段 3.删除时间字段。 PS。 Rails 中的时间字段使用_at 是惯例。示例 parsed_at 而不是 time
    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2018-08-09
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2013-03-06
    相关资源
    最近更新 更多