三. MongoDB中的日期查询命令的记录:大于、小于、等于,Date 和ISODate的区别
1.在mongoDB数据库中,时间的保存是ISODate类型,orm关系映射为java.util.Date类型,其保存的时间与我们会有8小时的区别(保存的时间比我们早了8个小时)。
Java 驱动帮我们做了转换。
com.mongodb.util.JSONSerializers.LegacyDateSerializer
代码:
private static class LegacyDateSerializer extends CompoundObjectSerializer {
LegacyDateSerializer(ObjectSerializer serializer) {
super(serializer);
}
@Override
public void serialize(Object obj, StringBuilder buf) {
Date d = (Date) obj;
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setCalendar(new GregorianCalendar(
new SimpleTimeZone(0, "GMT")));
serializer.serialize(
new BasicDBObject("$date", format.format(d)),
buf);
}
}
mongo中的时间与China系统时间相差了8个小时,
这是因为mongo中的date类型以UTC(Coordinated Universal Time)存储,就等于GMT(格林尼治标准时)时间。而系统时间使用的是GMT+0800时间,两者正好相差8个小时。
2.大于小于等于
{"updateTime" : {"$gte":ISODate("2016-11-28T11:16:33.303Z"),"$lte":ISODate("2016-12-05T01:16:33.303Z")}}