首頁 > 軟體

Mongodb 如何將時間戳轉換為年月日日期

2022-10-20 14:03:54

Mongodb將時間戳轉換為年月日日期

使用dateToString 方法進行轉換 並且通過format指定轉換日期格式

        Integer userId=aaa;
        GroupOperation groupOperation = Aggregation.group("day").sum("money").as("todayIncome").count().as("todayPayCount");
        Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.match(Criteria.where("userId").is(userId)),
                project("userId","money").andExpression("{$dateToString: {date: { $add: {'$createTime', [0]} }, format: '%Y%m%d'}}", new Date(28800000)).as("day"),
                groupOperation,
                sort(Sort.Direction.ASC, "_id")
        );

注意:

1.必須使用 $dateToString: {date: { $add: 通過求和進行date資料轉換 如果去掉後面的會報解析錯誤

org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 16006 (Location16006): 'can't convert from BSON type long to Date' on server localhost:50000. The full response is {"ok": 0.0, "errmsg": "can't convert from BSON type long to Date", "code": 16006, "codeName": "Location16006"}; nested exception is com.mongodb.MongoCommandException: Command failed with error 16006 (Location16006): 'can't convert from BSON type long to Date' on server localhost:50000. The full response is {"ok": 0.0, "errmsg": "can't convert from BSON type long to Date", "code": 16006, "codeName": "Location16006"}

2.必須增加 new Date(28800000) 的時間 原因是增加了8個時區的偏移量

MongoDB中的日期查詢的坑

在熟悉monggoDB的時候遇到了時間查詢的問題程式碼如下:

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
 
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
 
/**
 * mongo 資料庫直連測試
 * @author fuhao
 *
 */
public class MongDBTest {
	public static void main(String[] args) throws Exception {
		List<ServerAddress> list = new ArrayList<ServerAddress>();
//		連線資料庫   ip 埠
		list.add(new ServerAddress("10.39.XXX.XXX", 27010));
		MongoClient mongoClient = new MongoClient(list);
		//資料庫名稱
	    DB psdoc = mongoClient.getDB("qa_db_center");
	    //表明
	    DBCollection collection=psdoc.getCollection("base_user_info");
	    
	    BasicDBObject queryObject = null; 
	    
	    // 時間查詢    資料庫看到的時間不是真實時間  加8小時後才是正確的時間
	    DBObject dbObject = new BasicDBObject();
	    String startDate = "2018-03-29 15:59:06";
	    String endDate = "2018-03-29 16:30:46";
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	    dbObject.put("$gte", sdf.parse(startDate));
	    dbObject.put("$lte",  sdf.parse(endDate));
	    queryObject = new BasicDBObject();
	    queryObject.put("create_time",dbObject);
	    DBCursor find = collection.find(queryObject);
	     
	    while (find.hasNext()) {
	    	 DBObject next = find.next();
	    	 Object real_name = next.get("real_name");
	    	 Object mobile = next.get("mobile");
	    	 Object create_time = next.get("create_time"); 
	    	 String str = sdf.format(create_time);
	    	 System.out.println(real_name +"====="+mobile +"====="+str);
		}
	     System.out.println("結束");
	    
	}
}

請求頁面 預設頁 https://blog.csdn.net/qq_27292113/article/details/91876121 【標題】:MongoDB中的日期查詢的坑_天馬行空-的部落格-CSDN部落格_mongodb query 日期 【內容】:

在熟悉monggoDB的時候遇到了時間查詢的問題程式碼如下:

上面的程式碼中查詢時間 按mysql 的流程應該查詢到 2018-03-29 15:59:06 到2018-03-29 16:30:46 這個區間的資料,但是mongoDB不同,因為mongo中的date型別以UTC(Coordinated Universal Time)儲存,就等於GMT(格林尼治標準時)時間。而系統時間使用的是GMT+0800時間,兩者正好相差8個小時。也就是用java 程式碼插入的時間型別的值都會被減8小時。這個坑挺大的不注意很容易出事。

展示一下對比資料便於理解:

上面的圈是查詢的條件對應資料庫中的資料是2018-03-29T08:30:36.310Z 如下圖,但是在java中你寫2018-03-29 08:30:36這個時間肯定查不到資料

對比得出資料庫中看到的時間和實際時間差8小時,但是查詢出來的結果時間還是會被轉換回來(不以時間為條件查詢的話基本沒什麼問題)。

記錄一下mongoDB中查詢區間時間的執行語句:

db.getCollection('base_user_info').find({"create_time":{"$gte":ISODate("2018-03-29 07:59:06"),"$lte":ISODate("2018-03-29 08:30:46")}});

base_user_info :表名  create_time:欄位名

比較符號對應列表

  • $gt -------- greater than  >
  • $gte --------- gt equal  >=
  • $lt -------- less than  <
  • $lte --------- lt equal  <=
  • $ne ----------- not equal  !=
  • $eq  --------  equal  =

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com