MongoDB 插入的时间少了8个小时

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个小时。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值