2015-03-25 2 views
0

Я пытаюсь создать фильтр на представлении, что позволяет пользователям фильтровать данные по времени диапазонов:Фильтрация по времени только в Граалей

enter image description here

Когда пользователь выбирает это, он отображает на перечисление тип 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 закрытии.

Есть ли способ сказать критерии только использовать временную часть во время сравнения, или есть ли способ, что я могу объявить lowerBound и upperBound не иметь дело с Date?

ответ

1

прямой вперед подход будет сэкономить количество секунд (или Millis) с 00:00:00, так что поиск так же просто, как:

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

критериев:

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

Независимо я сделал что-то почти идентичное этому, и у меня это работает. Хорошее предложение! +1 – christopher

Смежные вопросы