Java / MongoDB searchQuery更改日期

时间:2017-11-08 09:53:39

标签: java mongodb date

我使用此代码创建了2个日期,当我将它们传递给BasicDBObject时,将一小时减去日期:

public static Date hoursBack(int hours){
    Calendar cal = Calendar.getInstance();
    cal.setTimeZone(TimeZone.getTimeZone("Europe/Amsterdam"));
    cal.setTime(DateCreator.currentDate());
    cal.add(Calendar.HOUR, -1*hours);

    return cal.getTime();
}
Date date1 = hoursBack(1);
Date date2 = hoursBack(2);

System.out.println(date1.toString());
// Wed Nov 08 09:36:44 CET 2017
System.out.println(date2.toString());
// Wed Nov 08 10:36:44 CET 2017

然后我将这些日期传递给BasicDBObjects

List<BasicDBObject> obj = new ArrayList<>();
obj.add(new BasicDBObject("timeStamp", new BasicDBObject("$gte", date1)));
obj.add(new BasicDBObject("timeStamp", new BasicDBObject("$lte", date2)));

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("$and", obj);

System.out.println(searchQuery.toString());
// "$and" : [ { "timeStamp" : { "$gte" : { "$date" : "2017-11-08T08:36:44.232Z"}}} , { "timeStamp" : { "$lte" : { "$date" : "2017-11-08T09:36:44.232Z"}}}]

在searchquery中,BasicDBObject减去了一小时的日期。

为什么会这样?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我发现它,BasicDBObject使用Date对象的纪元。有很多问题,为什么Date.toString()给出了Date对象的纪元的另一个时间。 .toString()当然不使用TimeZone,epoch,所以我要用纪元时间修复它。