2013-11-26 75 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