MongoDB UTC时间问题

  • 偶然导入一批数据,发现在MongoVUE中看到的日期比实际的日期少了8个小时,原因为MongDB采用的是UTC时间(协调时间时)
  • 如果想要其正常显示,可设置MongoVUE,选择Tools下的Preferences,弹出设置,如下图:设置为Local Timezone后,重新打开view即可
MongoDB UTC时间问题_第1张图片
  • 引申出几个问题,第一个为日期如何查询? 第二个为在程序中如何操作?
  • 第一个问题,查询的时候,在工具中,MongoDB会自动将查询的日期减去8小时去查,按正常理解来操作就行,注意图中红框处即可,如下图:
MongoDB UTC时间问题_第2张图片
  • 第二个问题,在程序中,读取时间,以及插入时间(使用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<Document> collection = db.getCollection("Test");
		// 读取数据
		MongoCursor<Document> 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) ;  
    } 
}


你可能感兴趣的:(java,mongodb,UTC)