我使用此代码创建了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减去了一小时的日期。
为什么会这样?我该如何解决这个问题?
答案 0 :(得分:0)
我发现它,BasicDBObject使用Date对象的纪元。有很多问题,为什么Date.toString()给出了Date对象的纪元的另一个时间。 .toString()当然不使用TimeZone,epoch,所以我要用纪元时间修复它。