2012-11-22 117 views
1

我們使用Java和查詢MongoDB。 想要獲取前一天的記錄。例如,我們希望獲得所有昨天註冊的學生。下面是我們使用的查詢,java mongo日期搜索

Date toDay = new Date();    
Date twoDaysBack = Util.twoDaysBack(toDay); 
query.put("enroldate", new BasicDBObject("$gt", twoDaysBack).append("$lt", toDay)); 

說,如果今天是11月22日,2012年該查詢顯示招收21日以及即使我們已經指定$ LT今天22日學生名單。

這裏有什麼問題?

+1

'這裏有什麼問題?'問題是你沒有包括什麼是錯誤信息,或者你在運行代碼時收到的問題...... – ppeterka

+2

這裏的問題是他希望從昨天,但他今天也收到數據。我認爲他充分解釋了它。 – Philipp

回答

1

Tha Java Date對象不僅包括當天,而且還包括時間,精確到秒。所以當你創建一個新的Date()時,你會得到當前日期和當前時間。今天任何更早的日期都比它少。當你的數據庫沒有時間包含日期時,它被視爲November 22nd 2012 00:00:00。這小於November 22nd 2012 11:05:22

解決方案:將toDay的小時,分​​鍾和秒設置爲0以排除今天的任何日期。

順便說一句:許多Java程序員認爲庫jodatime遠遠優於Java的本地日期和時間處理類。這開始於它相當於具有較少誤導性名稱的java.util.Date DateTime