以字节为单位的日期时间

Datetime in bytes

我正在尝试从字节形式解码日期时间。我尝试了各种方法(秒、分钟、小时形式 1-1-1970、分钟形式 1-1-1 等)。我也试过 mysql 编码 (https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html) 也没有效果。 请帮我找到日期时间保存密钥。

bf aa b8 c3 e5 2f
d7 be ba c3 e5 2f
80 a0 c0 c3 e5 2f
a7 fc bf c3 e5 2f
ae fd f2 c3 e5 2f
9e dd fa c3 e5 2f
c7 ce fa c3 e5 2f
b9 f5 82 c4 e5 2f
f8 95 f2 c3 e5 2f

一切都在 2022 年 1 月 14 日左右 12:00

每个值都是编码到 VARINT 中的时间戳。很久以前,我已经为 decode/encode VARINT:

创建了下一个函数
def to_varint(src):
    buf = b""
    while True:
        towrite = src & 0x7f
        src >>= 7
        if src:
            buf += bytes((towrite | 0x80,))
        else:
            buf += bytes((towrite,))
            break
    return buf

def from_varint(src):
    shift = 0
    result = 0
    for i in src:
        result |= (i & 0x7f) << shift
        shift += 7
    return result

所以使用这个函数我们可以解码你的值:

from datetime import datetime

...

values = """\
bf aa b8 c3 e5 2f
d7 be ba c3 e5 2f
80 a0 c0 c3 e5 2f
a7 fc bf c3 e5 2f
ae fd f2 c3 e5 2f
9e dd fa c3 e5 2f
c7 ce fa c3 e5 2f
b9 f5 82 c4 e5 2f
f8 95 f2 c3 e5 2f"""

for value in values.splitlines():
    timestamp = from_varint(bytes.fromhex(value))
    dt = datetime.fromtimestamp(timestamp / 1000)
    print(dt)

要获取此编码的当前时间戳,您可以使用下一个代码:

current = to_varint(int(datetime.now().timestamp() * 1000)).hex(" ")