在grails中按时间过滤
Filtering by just time in grails
我正在尝试在视图上创建一个过滤器,允许用户按时间范围过滤数据:
当用户 select this 时,它映射到包含两个日期对象的枚举类型 TimeRange
。这些日期对象仅包含各自的时间,分别称为 lowerBound
和 upperBound
。例如:
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 日期早于或等于纪元时间。
有没有办法告诉标准在比较期间只使用时间部分,或者有没有办法让我声明 lowerBound
和 upperBound
不关心 Date
?
直接的方法是从 00:00:00 中保存秒数(或毫秒),这样查找就像:
enum Range {
MIDNIGHT_TO_SIX( 1, 0, 6 * 60 * 60 ) //in seconds
}
条件:
{
between 'startInSec', range.lower, range.upper
}
我正在尝试在视图上创建一个过滤器,允许用户按时间范围过滤数据:
当用户 select this 时,它映射到包含两个日期对象的枚举类型 TimeRange
。这些日期对象仅包含各自的时间,分别称为 lowerBound
和 upperBound
。例如:
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 日期早于或等于纪元时间。
有没有办法告诉标准在比较期间只使用时间部分,或者有没有办法让我声明 lowerBound
和 upperBound
不关心 Date
?
直接的方法是从 00:00:00 中保存秒数(或毫秒),这样查找就像:
enum Range {
MIDNIGHT_TO_SIX( 1, 0, 6 * 60 * 60 ) //in seconds
}
条件:
{
between 'startInSec', range.lower, range.upper
}