偶然导入一批数据,发现在MongoVUE中看到的日期比实际的日期少了8个小时,原因为MongDB采用的是UTC时间(协调时间时)如果想要其正常显示,可设置MongoVUE,选择Tools下的Preferences,弹出设置,如下图:设置为Local Timezone后,重新打开view即可
引申出几个问题,第一个为日期如何查询? 第二个为在程序中如何操作?第一个问题,查询的时候,在工具中,MongoDB会自动将查询的日期减去8小时去查,按正常理解来操作就行,注意图中红框处即可,如下图:
第二个问题,在程序中,读取时间,以及插入时间(使用3.0最新Drive API):
package org.mice;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
public class Test {
/**
* 测试
* @param args
*/
public static void main(String[] args) {
MongoClient mongo = new MongoClient("localhost", 27017);
MongoDatabase db = mongo.getDatabase("chen");
MongoCollection collection = db.getCollection("Test");
// 读取数据
MongoCursor cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
Document temp = cursor.next();
System.out.println(Test.getLocalTimeFromUTC((Date)temp.get("MyDate")));
}
} finally {
cursor.close();
}
// 测试插入一条记录
Document doc = new Document("MyDate", new Date());
collection.insertOne(doc);
}
private static DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
public static String getLocalTimeFromUTC(Date UTCDate){
format.setTimeZone(TimeZone.getDefault()) ; // 不加的话,读取出的时间也正确
return format.format(UTCDate) ;
}
}