解決關於pymongo操作mongodb的時區問題

  1. mongodb的日期時間格式是UTC時間,中國時間 = UTC時間 +8

  2. 可在pymongo客戶端加入時區以解決此問題:

    import pytz
    from pymongo import MongoClient
    from datetime import datetime
    
    tzinfo = pytz.timezone('Asia/Shanghai')
    
    client = MongoClient(
        host="127.0.0.1",
        port=27017,
        username="root",
        password="123456",
        authSource="admin",  # 在哪個數據庫進行身份驗證,默認是admin
        tz_aware=True,  # 設置爲True
        tzinfo=tzinfo   # 加入時區信息
    )
    db = client["test"]
    collection = db["mytest"]
    
    datetime.now()  #  2020-04-11 10:42:42.452433
    ret = collection.insert_one({
        "name": "測試5",
        "create_time": tzinfo.localize(datetime.now())  
    })
    # create_time不能使用datetime.now()獲取時間,
    # 應該使用 datetime.utcnow()或 tzinfo.localize(datetime.now())或 datetime.now(tz=tzinfo)
    # 這樣讀取數據時日期時間纔是標準的中國時間
    res = collection.find_one({"name": "測試5"})
    print(res)
    # {'_id': ObjectId('5e912ea261d252f76350728a'), 'name': '測試5', 'create_time': datetime.datetime(2020, 4, 11, 10, 42, 42, 452000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)}
    
    # 下面測試直接使用datetime.now()的情形
    datetime.now()  # 2020-04-11 10:49:41.899445
    collection.insert_one({
        "name": "測試6",
        "create_time": datetime.now()
    })
    res = collection.find_one({"name": "測試6"})
    # {'_id': ObjectId('5e913045143015041d776d08'), 'name': '測試6', 'create_time': datetime.datetime(2020, 4, 11, 18, 49, 41, 899000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)}
    # 可以看到時間+8小時
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章