MongoDB 插入的時間少了8個小時
阿新 • • 發佈:2019-01-27
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個小時。