在grails中按时间过滤

Filtering by just time in grails

我正在尝试在视图上创建一个过滤器,允许用户按时间范围过滤数据:

当用户 select this 时,它映射到包含两个日期对象的枚举类型 TimeRange。这些日期对象仅包含各自的时间,分别称为 lowerBoundupperBound。例如:

MIDNIGHT_TO_SIX(1, Date.parse("HH:mm:ss", "00:00:00"), Date.parse("HH:mm:ss", "06:00:00")

这将生成一个 Date 对象。因为我没有指定日期部分,所以设置为纪元日期。当我在标准中使用这些进行过滤时:

and {
   or {
       eq('startDateTime', range.lowerBound)
       gt('startDateTime', range.lowerBound)
   }

   or {
       eq('startDateTime', range.upperBound)
       lt('startDateTime', range.upperBound)
   }
}

未返回任何内容!这显然是因为根据上次 or 关闭,我数据库中的 none 日期早于或等于纪元时间。

有没有办法告诉标准在比较期间只使用时间部分,或者有没有办法让我声明 lowerBoundupperBound 不关心 Date?

直接的方法是从 00:00:00 中保存秒数(或毫秒),这样查找就像:

enum Range { 
  MIDNIGHT_TO_SIX( 1, 0, 6 * 60 * 60 ) //in seconds 
}

条件:

{
  between 'startInSec', range.lower, range.upper 
}