MongoDB默认使用_id字段作为主键,类型为ObjectID。Objectid的生成一定的规则,Objectid有12位:

  • 前4位是时间戳

  • 中间5位是随机值

  • 后3位是递增计数器

基于这个特性,我们可以通过_id字段的值来还原当时的时间。

import time
from bson.objectid import ObjectId
import datetime


def time2id(from_datetime=None, time_delta=None):
    if from_datetime is None or not isinstance(from_datetime, datetime.datetime):
        from_datetime = datetime.datetime.now()  # 时间元组
        print(from_datetime)
    if time_delta:  # time_delta 是datetime.timedelta 类型,可以进行时间的加减运算
        from_datetime = from_datetime + time_delta

    return ObjectId.from_datetime(from_datetime)


def id2time(object_id):
    timeStamp = int(object_id[:8], 16)
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timeStamp))


object_id = "614bf13a83f4c0000f52065a"
print(id2time(object_id))

object_id = "6063134402593b000dc53733"
print(id2time(object_id))

aa = datetime.datetime(2021, month=7, day=30, hour=20, minute=2, second=12,
                microsecond=0)
obj = time2id(aa)
print(obj)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐