Python获取当前时间毫秒数的两种常用写法

Owen
Owen
发布时间:2026-11-05| 8人浏览过
原创

在Python中获取当前时间毫秒数,最常用的两种写法分别是基于time.time()的浮点数换算和基于Python 3.7+引入的time.time_ns()纳秒整除。本文详细讲解两者的代码写法、换算原理、精度差异与适用场景。

在网络请求鉴权、分布式唯一 ID 生成(如雪花算法)、数据库记录写入以及高并发接口调用等业务场景中,我们经常需要使用 13 位的标准毫秒级时间戳。Python 标准库内置的 time 模块默认提供以秒为单位的浮点时间戳,并没有直接命名为 time.milliseconds() 的现成函数。开发者通常通过两种写法来获取当前的毫秒数:一种是基于 int(time.time() * 1000) 的浮点数放大截断,另一种是基于 Python 3.7+ 引入的 time.time_ns() // 1_000_000 纯整数整除。本文直接展开这两种写法的代码实现、底层换算机制、精度差异以及实际开发中的选型建议。

Python获取当前时间毫秒数的两种常用写法
图示:Python 获取当前时间毫秒数的两种常用技术路径一览

一、毫秒时间戳的换算逻辑与操作流程

计算机系统中的时间戳通常以 Unix 纪元时间(即协调世界时 1970 年 1 月 1 日 00:00:00)为起始基准。标准秒级时间戳是一个 10 位左右的数值,而毫秒级时间戳则精确到千分之一秒(1 秒 = 1000 毫秒),表现为 13 位整数。在 Python 中获取该数值的标准操作流程包含四个阶段:引入标准库、读取系统时钟源、实施数量级换算、输出规范的整数结果。

Python获取当前时间毫秒数的两种常用写法
图 1:Python 获取毫秒时间戳的标准操作流程与换算推导步骤

如上图所示,由于 Python 标准库中 time.time() 给出的是以秒为基准的浮点数,而 time.time_ns() 给出的是以纳秒为基准的纯整数,因此两者在第三步量级换算时采取了不同的数学操作:前者乘以 1000 后取整,后者直接除以一百万整除。

二、写法一:基于 time.time() 的浮点数乘法换算

time.time() 是 Python 中历史最悠久、使用最广泛的时间函数,其返回值是一个表示自 Unix 纪元起经过的秒数的浮点数(float)。将该返回值乘以 1000,即可将单位转换为毫秒,最后使用 int() 截断小数部分,得到 13 位的毫秒级整数。

1. 完整代码示例

import time

# 获取当前时间毫秒数(写法一:秒级浮点数乘法换算)
timestamp_ms = int(time.time() * 1000)

print("当前毫秒时间戳:", timestamp_ms)

# 示例输出:
# 当前毫秒时间戳: 1718000000123
Python获取当前时间毫秒数的两种常用写法
图 2:写法一 time.time() 浮点数计算与取整机制解析

2. 机制细节与 int() 对比 round()

在写法一中,乘以 1000 后的小数值可能包含小数点后若干位(代表微秒和纳秒部分)。在处理末尾小数时,主要有两种常见选择:

  • 使用 int() 截断:int(time.time() * 1000) 会直接丢弃所有小数位(即向零取整)。这是最常见且开销极小的写法,完全能够满足绝大多数对时间递增顺序要求严格的业务场景。
  • 使用 round() 四舍五入:round(time.time() * 1000) 会根据小数部分就近舍入到最接近的整数毫秒。如果业务非常关注时间戳在物理时间轴上的严格邻近性,可以采用 round()。
版本兼容性提示
time.time() 适用于所有的 Python 2.x 与 Python 3.x 版本。如果你的代码需要发布为公共通用库,并且必须向后兼容旧环境或嵌入式 Python 解释器,这种写法是兼容性最宽泛的安全方案。

三、写法二:基于 time.time_ns() 的纯整数整除(Python 3.7+)

Python 3.7 在 PEP 564 中引入了一组带有 _ns 后缀的时间函数。其中 time.time_ns() 直接返回自 Unix 纪元以来的纳秒数(十亿分之一秒),返回值类型为 Python 内置的任意精度整数(int),不再经过浮点数转换。

因为 1 毫秒等于 1,000,000 纳秒,所以只需使用 Python 的地板除运算符 // 整除 1,000,000,即可直接得到 13 位的毫秒数。

1. 完整代码示例

import time

# 获取当前时间毫秒数(写法二:纳秒整数地板除)
timestamp_ms = time.time_ns() // 1_000_000

print("当前毫秒时间戳:", timestamp_ms)

# 示例输出:
# 当前毫秒时间戳: 1718000000123
Python获取当前时间毫秒数的两种常用写法
图 3:写法二 time.time_ns() 纳秒整除机制 (PEP 564) 与整数优势

2. 为什么 PEP 564 推荐使用纯整数?

现代操作系统(如 Linux 的 clock_gettime、macOS 以及 Windows)内核时钟已支持纳秒级分辨率。原有的 time.time() 将系统时钟返回的数值转换成了 64 位 IEEE 754 双精度浮点数。随着 Unix 时间戳数值不断增长(目前整数部分已达到 1.7×10⁹),双精度浮点数的 53 位二进制尾数分配给小数部分的位数逐渐变少,无法完整表达微秒与纳秒精度。

time.time_ns() 从操作系统读取纳秒数值后,直接包装成 Python 的 int 对象。后续通过 // 1_000_000 进行整除,全程处于高精度整数域中运算,杜绝了一切由于浮点近似表示引发的不确定性,运算速度也相当直接高效。

四、两种写法的关键差异与选型建议

在实际工程中,这两种写法都能稳定产出 13 位整数,但在底层机制、性能开销与适用范围上各有侧重。下表给出了客观维度的系统对比:

对比维度 写法一:int(time.time() * 1000) 写法二:time.time_ns() // 1_000_000
支持的最低 Python 版本 全版本支持(Python 2.x 及 Python 3.x) Python 3.7 及以上版本(PEP 564)
计算链路与类型 float (秒) → float (毫秒) → int 转换 int (纳秒) → int (毫秒) 纯整数运算
精度稳定性 毫秒级内有效,但底层存在 IEEE 754 浮点转换 无任何浮点损耗,严谨保真,数学确定性极高
代码书写规范 借助 int() 强制类型转换 利用整除 // 与数字下划线 1_000_000
推荐使用场景 跨版本兼容工具脚本、旧项目维护 现代 Python 项目(新开发项目首选推荐)
Python获取当前时间毫秒数的两种常用写法
图 4:两种常用毫秒获取写法的全维度对比与技术选型决策图

开发中的重要注意事项:时间戳与耗时统计的区别

需要特别注意,本文介绍的 time.time() 和 time.time_ns() 获取的均是墙上时钟时间(Wall-clock Time)。这类时钟反映的是操作系统当前的时钟读数,会受到 NTP 网络时间同步校准、时区调整或用户手动修改系统时间的影响,在极端情况下可能发生时间回拨(跳变)。

耗时测量请使用单调时钟
如果你的需求是测量某段代码或函数的执行耗时,而不是记录事件发生的物理时间点,请不要使用 time.time() 或 time.time_ns()。用于性能统计与耗时测量的标准工具是单调时钟函数:time.perf_counter() 或 time.monotonic_ns()。单调时钟保证时间永远严格单调递增,不受系统时间调整影响。

总结

获取当前时间毫秒数的逻辑本质是单位换算:

  • 如果你的开发环境是 Python 3.7+,推荐使用 time.time_ns() // 1_000_000,代码语义清晰、纯整数运算无损且执行性能优秀;
  • 如果你的代码需要保证在 各种老旧环境或通用基础库 中正常运行,使用 int(time.time() * 1000) 是最稳妥的兼容选择。
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。