1

我们正在使用 Java 并查询 MongoDB。想要获取前一天的记录。例如,我们想要获取昨天注册的所有学生。这是我们使用的查询,

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

假设今天是 2012 年 11 月 22 日。即使我们为今天指定了 $lt,此查询也会显示 21 日和 22 日注册的学生列表。

这里有什么问题?

4

1 回答 1

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开始。

于 2012-11-22T10:04:13.887 回答