解决关于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小时
    
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值