2010-03-24 70 views
1

我目前存儲Joda DateTime(Datetime + TimeZone)值到數據庫中。Jodatime groovy/grails日期範圍搜索與TimeZone轉換

我想要做的是根據用戶的時區抓取24小時的記錄,而不是UTC時間。 I.E.我想爲時區格林尼治標準時間的人在00:00GMT-24:00GMT和00:00PST-24:00PST之間爲時區爲PST的人獲取記錄。

現在我不認爲我可以在HQL查詢中做到這一點,顯然HQL不會爲我執行DateTime.toDateTime(toZone)轉換。那麼是否有可能在groovy/grails中執行這種範圍搜索?

回答

1

我想過了這一點,解決辦法可能是以另一種方式攻擊它。不要試圖在休眠級別執行toDateTime(zone),而要在更高的級別上執行 - 即創建start-> end搜索條件;

DateTimeZone toZone = DateTimeZone.forID("Europe/London"); 
    DateTime now = new DateTime() 
    DateTime today = new DateTime(now.year, now.monthOfYear, now.dayOfMonth, 0, 0, 0, 0) 
    DateTime yesterday = today.minusDays(1) 

    def queryStr = "from JODATesting j where j.thedate > :date1 and j.thedate < :date2" 
    for (JODATesting joda: JODATesting.executeQuery(queryStr, [date1: yesterday, date2: today])) { 
     println("##### Joda"+joda.id +"=" +joda.thedate.toDateTime(toZone)); 
    } 
+0

然而,這不是一個理想的解決方案 - 有些人覺得免費(請!)提供更好的東西 - 最好使用標準。 – Amoeba 2010-03-25 15:01:00