2015-03-25 77 views
0

我試圖創建,允許用戶通過時間來過濾數據視圖中的過濾器時間範圍:過濾通過剛剛在Grails的

enter image description here

當用戶選擇該選項,它映射到一個枚舉鍵入包含兩個日期對象的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結束。

有沒有告訴標準的比較過程中只使用時間部分的方式,或者是沒有辦法,我可以聲明lowerBoundupperBound不與Date關注的方法嗎?

回答

1

直進的方法是從00:00:00保存的秒(或者米利斯)的數量,從而使該查找一樣簡單:

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

標準:

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

獨立我做了幾乎相同的事情,我已經得到了它的工作。好建議! +1 – christopher 2015-03-25 16:05:34