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)