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

如何在Python中从UUID正确提取时间信息(匹配uuid -d结果)

解决Python提取UUIDv1时间与uuid -d结果不一致的问题

你遇到的核心问题是时区不匹配和计算细节的小偏差,咱们用Python内置的uuid和datetime模块就能完美解决,不用额外依赖。

问题根源分析

你现有的代码有两个关键问题:

  1. 时区差异:uuid -d输出的是UTC标准时间,但你的datetime.fromtimestamp()默认使用本地时区转换,导致结果差了10小时(推测你的本地时区是UTC+10)。
  2. 冗余的语法标记:Python3里0x01b21dd213814000L的L已经没必要,不过这不会影响计算结果。

正确的Python实现

UUIDv1的时间字段是从1582年10月15日00:00:00 UTC开始的100纳秒计数,我们只需要把这个计数转换成UTC时间即可:

import uuid
from datetime import datetime, timezone

request_id = "78577992-6170-11e8-a1e4-f3a982af936e"
request_uuid = uuid.UUID(request_id)

# 把UUID的100纳秒计数转换成UTC时间戳(秒)
# 0x01b21dd213814000是1582-10-15 00:00:00 UTC对应的100纳秒基准值
timestamp = (request_uuid.time - 0x01b21dd213814000) / 10_000_000

# 生成UTC时区的datetime对象,确保和uuid -d输出时区一致
utc_datetime = datetime.fromtimestamp(timestamp, timezone.utc)

# 格式化输出和uuid -d一致的格式
print(f"{utc_datetime.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]} UTC")

运行这段代码,输出会和uuid -d的结果完全对齐:

2018-05-27 05:40:31.803 UTC

(如果需要保留更精细的小数位,去掉[:-3]即可得到2018-05-27 05:40:31.803022 UTC,和uuid -d的输出完全匹配)

为什么这样有效?

  • 我们明确指定了timezone.utc,确保转换后的时间是UTC标准时区,和uuid -d的输出逻辑对齐。
  • 计算时直接将100纳秒计数除以10^7(因为1秒=10,000,000个100纳秒),比你原来的*100/1e9更直观,计算结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:04