2013-11-26 74 views
0

你好我得到以下問題,同時實現邏輯從MongoDB中取出1個月大的文件。 下面是代碼和輸出...日期查詢MongoDB中時區問題

currDate = new Date(); // value is : Tue Nov 26 15:22:10 **EST** 2013 
Calendar calDate = Calendar.getInstance(); 
calDate.setTime(new Date()); 
calDate.add(Calendar.MONTH,-1);    
currDateMinusOneMonth = calDate.getTime(); // value is : Sat Oct 26 15:22:10 **EDT** 2013        

Criteria c1 = Criteria.where("publishDate").lt(currDateMinusOneMonth);      
Query query = new Query(c1);   
logger.info("Query to find 1 month old documents: " + query.toString()); --> 
{"publishDate" : { "$lt" : { "$date" : "2013-10-26T**19**:22:10.571Z"}}}      

不知怎的,它增加了4個小時的查詢時間。不知道爲什麼會這樣。我們如何避免這種情況?

當我替換標準如下

Criteria c1 = Criteria.where("publishDate").lt(**currDate**); 

它增加了5小時而不是4小時。猜測是因爲currDate值是在EST而不是EDT.Thanks。

回答

2

它增加了4個小時,因爲該日期是UTC,這是美國東部時間提前4小時(這是正確的時區一個月前)顯示。我認爲這裏沒有問題。

+0

所以預期右它將運行查詢?我不需要擔心執行日期是4個小時? – NewQueries

+0

是的,它應該調整他們都來自同一個時區來比較,所以應該是「正確的」。但它真的很重要嗎?我的意思是,的「一個月前」的定義似乎有點主觀反正(有些月份有31天,其他有28)。如果你的文件太早/刪除一個小時,四晚,是要損害你的業務流程? –

+0

不是,在這種情況下,沒關係。我只是想知道如果有時間關鍵的應用程序。但是這有很大幫助。現在我可以嘗試一些非常重要的事情。謝謝。 – NewQueries