MongoDB UTC時間問題,mongodbutc時間
- 偶然匯入一批資料,發現在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<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) ; } }