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

Python中如何获取微秒/毫秒级高精度UTC Posix时间戳?

获取高精度UTC Posix时间戳(Python 3.10)

核心需求

  • 整数类型(彻底避免浮点精度损失)
  • 至少毫秒级精度,优先微秒/纳秒级
  • 基于UTC的Posix时间戳,用于同步外部硬件计数器

最优标准库方案(无浮点风险,纯整数运算)

1. 纳秒级UTC时间戳(最直接)

import time

# 单位:纳秒,自1970-01-01 UTC 00:00:00以来的总纳秒数
utc_nanos = time.time_ns()

纠正:你之前误以为time.time_ns()返回本地时间,这是错误的——该函数返回的是UTC时区的Posix时间戳纳秒数,和time.time()的定义完全一致,仅精度更高。

2. 微秒级UTC时间戳

基于纳秒值直接整除转换,无任何浮点运算:

import time

utc_micros = time.time_ns() // 1000  # 转换为微秒整数

3. 毫秒级UTC时间戳

import time

utc_millis = time.time_ns() // 1_000_000  # 转换为毫秒整数

你之前尝试方案的问题分析

  1. time.time_ns():你的核心误解——该函数返回的是UTC时间戳,不是本地时间,这其实是最匹配你需求的方案。
  2. time.mktime(time.gmtime()):time.mktime()的设计是接收本地时间元组并转换为Posix时间戳,而time.gmtime()返回的是UTC时间元组,因此会导致时区偏移(你看到的3599秒≈1小时,就是本地时区与UTC的时差)。此外该方法仅能提供秒级精度,无法满足需求。
  3. int(datetime.datetime.utcnow().timestamp() * 1000000):(注:你原代码存在语法错误,推测应为该写法)此方法依赖浮点运算,存在精度损失风险(浮点数无法精确表示所有大整数),且代码冗余。

备选方案(基于datetime模块)

如果需要严格绑定datetime模块的UTC时间计算,可使用以下无浮点的微秒级实现:

from datetime import datetime

utc_dt = datetime.utcnow()
# 计算自1970-01-01 UTC以来的微秒数,纯整数运算
utc_micros = (utc_dt - datetime(1970, 1, 1)).days * 86400 * 1_000_000 + utc_dt.second * 1_000_000 + utc_dt.microsecond

不过time.time_ns()的性能更优,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:27:10