You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从UUID v7中提取时间戳?

从UUID v7字符串提取时间戳的方法

根据UUID v7的定义,其前48位是自Unix纪元以来的毫秒级时间戳(大端无符号数),后续4位是固定版本位0111(对应十六进制的7)。提取时间戳的核心是解析这前48位数据,步骤如下:

手动提取步骤

  1. 移除分隔符:把UUID字符串中的-全部去掉,得到32位连续的十六进制字符(例如01893877-796f-7000-8123-456789abcdef变为01893877796f70008123456789abcdef)。
  2. 截取时间戳段:取前12位十六进制字符(每一位十六进制对应4位二进制,12×4=48位,正好匹配定义中的时间戳长度),比如上例中取01893877796f。
  3. 转换为十进制毫秒数:将截取的十六进制字符串转为十进制整数,这个数值就是Unix纪元以来的毫秒时间戳。
  4. 可选:转换为可读时间:把毫秒数除以1000得到秒级时间戳,再转换为具体的日期时间格式。

代码实现(Python)

from datetime import datetime

def extract_uuidv7_timestamp(uuid_str):
    # 移除UUID中的分隔符
    hex_raw = uuid_str.replace('-', '')
    
    # 校验是否为有效的UUID v7:第13位字符(索引12)必须是版本位'7'
    if len(hex_raw) != 32 or hex_raw[12] != '7':
        raise ValueError("输入不是有效的UUID v7格式")
    
    # 截取前12位十六进制字符(对应48位时间戳)
    timestamp_hex = hex_raw[:12]
    # 转换为毫秒级时间戳
    timestamp_ms = int(timestamp_hex, 16)
    # 转换为可读的datetime对象
    dt = datetime.fromtimestamp(timestamp_ms / 1000.0)
    
    return timestamp_ms, dt

# 示例使用
sample_uuid_v7 = "01893877-796f-7000-8123-456789abcdef"
ms_ts, readable_time = extract_uuidv7_timestamp(sample_uuid_v7)
print(f"毫秒时间戳: {ms_ts}")
print(f"对应时间: {readable_time}")

关键说明

  • UUID v7的版本位固定为十六进制7,提取前可以先校验这一点,避免处理非v7的UUID。
  • 因为时间戳是大端存储,十六进制字符串的顺序直接对应时间戳的高位到低位,无需反转字节顺序。

内容的提问来源于stack exchange,提问作者Gajus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:17:16