1、使用JDBC向MongoDB插入一条数据代码:
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
MongoCollection<Document> collection = mongoDatabase.getCollection("foo");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = simpleDateFormat.parse("2017-01-07 10:00:00");
Document document = new Document("title", "MongoDB")
.append("description", "database")
.append("likes", 100)
.append("time", date);
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents);
} catch (ParseException e) {
e.printStackTrace();
}
}
2、从上面看到,插入的时间是 2017-01-07 10:00:00。但是 使用
db.foo.find().pretty()
看到的结果如下:
{
"_id" : ObjectId("592fae8575b90226c0241812"),
"title" : "MongoDB",
"description" : "database",
"likes" : 100,
"time" : ISODate("2017-01-07T02:00:00Z")
}
可以看到MongoDB中的时间少了8个小时。
3、 其实Java 驱动帮我们做了转换。
com.mongodb.util.JSONSerializers.LegacyDateSerializer代码:
private static class LegacyDateSerializer extends JSONSerializers.CompoundObjectSerializer {
LegacyDateSerializer(ObjectSerializer serializer) {
super(serializer);
}
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")));
this.serializer.serialize(new BasicDBObject("$date", format.format(d)), buf);
}
}
在这里,做了时区转换。
GregorianCalendar
中国是东八区,差了8个小时。